# ArrayList mit if-Anweisung - Hilfe



## Kovanlik07 (16. Feb 2016)

Hallo zusammen!

Bei der folgenden Aufgabe habe ich Schwierigkeiten und wäre über jegliche Unterstützung dankbar. Es geht dabei um das Programm Eclipse Java:

1) In der Klasse Auto soll ein statisches Attribut vom Typ ArrayList mit der Bezeichnung "objektTabelle" definiert werden. ( In dieser Tabelle solen später die in der Klasse existierenden Autoobjekte gespeichert werden)

2) Fallunterscheidung: Wenn die "objektTabelle" noch nicht als Objekt existiert, soll in der Konstruktormethode der Klasse Auto eine neue Tabelle erzeugt werden und dem in Aufgabe 1 definierten Attribut "objektTabelle" zugewiesen werden.

3) Das in der Konstruktormethode der Klasse Auto neu erzeugte Autoobjekt soll in der Konstruktormethode der Klasse Auto der objektTabelle hinzugefügt bzw. in die ObjektTabelle geschrieben werden. Dazu gibt es in der Klasse "ArrayList" folgende Methode: public boolean add.


1)  
	
	
	
	





```
public class Auto {

static ArrayList <Auto> objektTabelle;

}
```


2+3)  
	
	
	
	





```
public class Auto {

public Auto() {

if( objektTabelle != new ArrayList<Auto> () )

   static ArrayList<Auto> neueTabelle= new ArrayList <Auto>();
   neueTabelle = objektTabelle;
   ArrayList.add(objektTabelle);
   }

}
```

Sind die Lösungsansätze richtig oder sind Fehler dabei?


----------



## kneitzel (16. Feb 2016)

Das ist so noch nicht korrekt. Wenn eine Reference noch nicht gesetzt wurde, dann ist diese null. Du musst also prüfen, ob die objektTabelle null ist.
Und dann erstellst Du eine neue Liste in neueTabelle. Kann man so machen.
Dann willst Du doch objektTabelle setzen. Die Zuweisung ist aber doch:
Ziel = Quelle.
Also müsstest Du die Zuweisung umdrehen:
objektTabelle = neueTabelle;
Aber Du musst die lokale Variable neueTabelle nicht, denn Du kannst die neue Instanz von ArrayList<Auto> doch direkt in objektTabelle speichern.
Und dann ist ArrayList doch die Klasse. Du willst das neu erstellte Auto doch zu der Liste hinzu fügen, oder? Du musst dann also genau auf der ArrayList Instanz das add aufrufen, in das du das Auto hinein stecken willst. Jetzt ist nur die Frage, wo und wie Du das aktuelle Auto bekommst. Hast Du da evtl. eine Idee? (Der Konstruktor ist da evtl. etwas verwirrend. Aber wenn Dein Auto eine Farbe hat, wie würdest Du die setzen können in einer Funktion?)

Und zu guter letzt: Auch wenn die Aufgaben unterschiedlich sind - Du brauchst immer eine volle Klasse. Also 2+3 brauchen das Ergebnis von 1! So fehlt da die Definition von objektTabelle.


----------



## JStein52 (16. Feb 2016)

Eher falsch.


```
public class Auto {
static private List<Auto> objektTabelle = null;

public Auto() {

if( objektTabelle == null) {
   objektTabelle = new ArrayList<Auto> ();
)
objektTabelle.add(this);

}

}
```


----------



## Kovanlik07 (16. Feb 2016)

Erstmals vielen Dank für die hilfreiche Antwort.

Ich habe noch eine letzte Frage: Kann man die letzte Zeile auch so schreiben?

ArrayList.objektTabelle.add(this)


----------



## kneitzel (16. Feb 2016)

Nein. ArrayList ist ja nur die Klasse, d.h. der "Bauplan" eines Objekts.
Diesen Bauplan braucht man aber nicht, um mit Objekten zu arbeiten.
Du brauchst nur die Objekte selbst. Du hast also objektTabelle und auf der rufst Du add auf um etwas hinzu zu fügen.


----------



## Joose (16. Feb 2016)

Nein. "ArrayList" ist eine Klasse welche kein Attribut "objektTabelle" hat.


----------



## Kovanlik07 (16. Feb 2016)

Ok danke euch nochmal.

Vor die Klasse müsste doch aber import java.util.ArrayList kommen, um mit der Klasse arbeiten zu dürfen?
ArrayList stellt ja sozusagen eine Bibliotheksklasse aus dem Paket java.util dar oder?


----------



## Joose (16. Feb 2016)

ja wenn du die ArrayList verwenden willst dann musst du diese natürlich auch importieren.
Die "import"s stehen immer ganz am Anfang der Datei. (es gibt noch den Workaround mit vollqualifizierten Zugriffen)

Hier ein Link dazu:http://stackoverflow.com/questions/11907245/java-import-statement-vs-fully-qualified-name


----------

