Java Zählvariable für neues Object neu initialisieren

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hallo zusammen, neues Programm, neues Problem.

Ich bin gerade dabei ein Programm zu schreiben welches Rechnungen ausgibt.
Einen Teil habe ich schon hin bekommen, leider scheitere ich an einer "Kleinigkeit".

Problemstellung:
Ich habe eine Rechnung in der ich Rechnungspositionen eintragen soll. Die Positionen sollen
nummeriert sein (von 1-x).
Erstelle ich eine zweite Rechnung sollen auch hier die Rechnungspositionen dargestellt werden, auch wieder mit der Nummerierung von 1-x.

Bei meinem Programm wird soweit alles ausgegeben. Allerdings werden die Rechnungspositionen für die Rechnung 2 fortlaufend eingetragen.

Bsp:
Rechnung 1: P1, P2, P3
Rechnung 2: P4,P5

Sollte aber für Rechnung 2 wieder mit: P1,P2 losgehen.

Mir ist auch klar warum dies geschieht, leider komme ich gerade auf keine Lösung wie ich die Aufzählung für jedes Objekt neu starte.

Anbei der Code, wie ich bisher die Variable zähle:
Code:
package rechnungenneu;

public class Rechnungsposition {

	private static int anzPositionen=0;
	private int position=0;
	private int menge=0;									//Anzahl der Menge eines Artikels
	private static final int rechMax=1; 					//Maximale Anzahl der Rechnungen die, die selbe Rechnungsposition kennen
	private Rechnung [] rech=new Rechnung[rechMax];			//Array zum speichern der Rechnungsposition
	private int rechAnz=0;
	
	
	//Getter & Setter
	public int getMenge() {
		return menge;
	}
	public void setMenge(int menge) {
		this.menge = menge;
	}
	public static int getRechmax() {
		return rechMax;
	}
	
	public int getRechAnz() {
		return rechAnz;
	}
	
	
	//Methoden
		
	public String getRech(){				//Methode zum Aufruf aller Rechnungen
		String ausgabe="";
		for(int i=0; i<rechAnz;i++){
			ausgabe+=rech[i]+"\n";
		}
		return ausgabe;
	}
	
		
	public void kennen(Rechnung r){												//Methode zum Eintragen der Rechnungsposition in der Rechnung?!
		if(r==null){
			throw new RuntimeException("kennt: ungültige Eingabe!");
		}
		if(nimmtTeil(r)) return;
		if(rechAnz==Rechnungsposition.rechMax){
			throw new RuntimeException("Rechnungsposition darf nur zu einer Rechnung gehören");
		}
		rech[rechAnz++]=r;
		r.besitzen(this);
	}
		
	
	private boolean nimmtTeil(Rechnung r) {
		if(r==null)
			throw new RuntimeException("nimmt Kenntnis: ungültige Eingabe");
		for(int i=0; i<rechAnz;i++){
			if (rech[i]==r) return true;
		}
		return false;
	}
	
		
	//Konstruktor
	public Rechnungsposition(int menge){
		setMenge(menge);	
		anzPositionen++;
		position=anzPositionen;
		
	}
	
	
	//Override
	
	@Override
	public String toString(){
		return "Rechnungsposition: "+position+"\nArtikel: "+getMenge()+" Stück";
	}
		
}
 
Du setzt Position auf die statische Variable anzPosition, die über alle Objekte den selben Wert hat. Wenn du für Position immer von 1 anfangen willst, weise ihr kein statischen Wert zu sondern zähle die Variable selber hoch.
 
dein fehler liegt darin, dass du zwei zählvariablen brauchst. du willst ne global eindeutige id für jede neue rechnung, und dann innerhalb der rechnung die einzelnen posten von 1..x durchnummerieren.
seh ich das richtig?

an deiner stelle würde ich es anders angehen. nimm kein statisches array für die posten, sondern z.b. ein ArrayList<Rechnung>. dann füg ne neue methode addRechnung(Rechnung r) hinzu, die ins array die rechnung einfügt. dann hast du implizit ne nummerierung 0..n-1 (nämlich den index des dynamischen arrays). brauchst dann eigentlich nur 1 dazu addieren und gut ist.
 

Ähnliche Themen

Zurück
Oben