# Verwaltungsstruktur?



## Gast (26. Mai 2007)

hallo,
ich will eine lagerverwaltung basteln die "anfangs" nur lagerelemente verwaltet
und dazu die erzeugten objekte in eine art arry packen um dann damit mit ihnen
hantieren zu können, mal als beispiel:


```
public class Lagerverwaltung {

private Lagerelement[] L;

public long anzahl = Lagerelement.anzahl;


public Lagerelement erstelleLagerelement(long ID) {

L[anzahl] = new Lagerelement(ID);

return L[anzahl];
}
```



```
}

public class Lagerelement {

private long ID;

public static long anzahl = 0;

public Lagerelement(long ID){
this.ID=ID;
anzahl=anzahl+1;
}
}
```
das is so gedacht das ich über die klasse lagerverwaltung ein element erzeuge und das sich das attribut anzahl bei jeder erzeugung erhöht.
beim zuweisen der objekte in der verwaltung soll also ein array vom typ lagerelement erzeugt werden auf dessen "positionen" jeweils immer ein element zugeordnet ist.
den wert der position der neuen objekte beschreibt gleichzeitig das attribut anzahl
so das bei jeder erzeugung das neue objekt auf einen "platz" im array hinter dem vorher erzeugten objekt zugegriffen werden kann. allerdings meckert java da noch rum? kann man das denn überhaupt so machen wie ich mir das hier so zusammengebastelt hab?

bzw wie bekom ich das hin das ich die position in abhängigkeit von dem wert
des attributs machen kann. wenn ich selber eine zahl einfüge gehts aber da wäre ja immer der selbe platz belegt und es würde sich alles überschreiben?


danke für eure hilfe


----------



## SlaterB (26. Mai 2007)

> public long anzahl = Lagerelement.anzahl;

hier wird zum Zeitpunkt der Objekterzeugung, der Wer der statischen Variable anzahl kopiert,
bei weiteren Erhöhungen wird public long anzahl nciht mitaktualisiert,

lass die Variable weg, verwende direkt:

L[Lagerelement.anzahl] = new Lagerelement(ID);
return L[Lagerelement.anzahl]; 

----------

generell solltest du die statische Variable aber entfernen,
was nützt sie dir?
du benutzt sie nur zum Einfügen in die Liste, dafür wäre 
public long anzahl
wiederum geeigneter (besser private long anzahl),
erhöhe diese Variable statt die statische?

-------

> allerdings meckert java da noch rum?

aha, schön für dich,
wenn da eine Frage hintersteckt, dann ist sie falsch formuliert 
(ich überlasse es mal dir, darüber nachzudenken, wie man eine korrekte Frage stellt)


----------



## Guest (26. Mai 2007)

danke erstmal
ich hab das ganze nochmal überdacht und denke das ich ja eigentlich gar keine methoden die werte rückgeben brauche, 
die verwaltung sowieso nur in der klasse bzw dem zugehörigen objekt zustande kommt. somit ich ich auf eine neue
variante gekommen um mich langsam an die sache ranzutasten.
nun hab ich das ganze so geschrieben das man mit zwei methoden 2 verschiedene "positionen" von L belegen kann und man mit der dritten methode abhängig vom wert des attributs dann die entsprechende information vom entsprechenden ort abrufen kann, allerdings will das einfach nich so richtig funktionieren.....   
wo liegt mein fehler? ich bin totaler javanoob und kann deshalb auch noch nicht soviel mit den fehlermeldungen anfangen, probieren tu ich das ganze bei BlueJ und das sagt immer NullPointerExzeption; null wenn ich eine 
der 3 methoden aufrufen will.



```
public class Lagerverwaltung {
 
 private Lagerelement[] L;
       
     public void erstelleLagerelement1(long ID) {
         
     L[1] = new Lagerelement(ID);
       
     }
 
     public void erstelleLagerelement2(long ID) {
         
     L[2] = new Lagerelement(ID);
     
     }     
 
 
     public long gibID(int nummer){
     
     return L[nummer].gibID();
     }
 
}
```

die klasse Lagerelement sieht noch genau so aus wie im obigen post


danke


----------



## ARadauer (30. Mai 2007)

L ist noch nicht inizialisert, oder? das hier is nicht php, du kannst nicht einfach eine beliebige anzahl von elementen in ein array einfügen, du musst vorher schon sagen, wie groß das array ist.

alternativ kannst du eine Collection verwenden, eine ArrayList oder einen Vector.
dann mekert mein Arbeitsrechner hier noch wegen den Long datentypen, L[anzahl], muss aber kein fehler sein, bin mir jetzt nicht sicher, muss hier in der arbeit mit einer älteren java version arbeiten. aja member variablen L , schreibt man klein!

ich würds so machen, ich hoff ich hab deine Aufgabenstellung richtig verstanden,


```
import java.util.ArrayList;


public class Lagerverwaltung { 

	private ArrayList l = new ArrayList(); 

	public int anzahl =0;

	public Lagerelement erstelleLagerelement(long id) { 
		Lagerelement temp = new Lagerelement(id);
		l.add((int) id, temp);
		return temp;
	} 
}
```


```
public class Lagerelement { 

	private long ID; 

	public static long anzahl = 0; 

	public Lagerelement(long ID){ 
		this.ID=ID; 
		anzahl=anzahl+1; 
	} 

}
```

Generics wären auch nicht unpraktisch, also ArrayList<Lagerelement>, aber meine Java Version, hier in der Arbeit kann das noch nicht......


----------

