# ArrayList Datenbank [i]??



## Shin_Sello (1. Sep 2010)

Hey, hallo erstmal
Ich bin neu im Forum also bitte nicht böse sein ^.^
Ich mache grade ArrayList Datenbanken, mit arrays weiß ich ja wie das geht...

Und ich hätt ne kleine Frage, die ich leider nicht mit der SuFu gefunden hab(wusste auch nicht genau wie ichs suchen soll)

Hier die Frage:
Ich gebe mal die komplette Datenbank aus, mit Arrays einfach:

```
for (int i = 0, i <Fahrzeugliste.length;i++){
                       if(Fahrzeugliste[i] != null){
                               System.out.println(Fahrzeugliste[i].toString);
                       }
               }
```

Aber im Arraylist weiß ich leider nicht ganz wie das geht, ich hatte es so ausprobiert:

```
public static void gibausDB() {
		for (int i = 0; i < Fahrzeugliste.size(); i++)
			System.out.println(Fahrzeugliste.toString());
	}
```
Bei der Ausgabe(nachdem ich was hinzugefügt hab) funktioniert es nicht...

Hilfe bitte


MfG Shin ^^


----------



## eRaaaa (1. Sep 2010)

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 12.3 Listen

[c]E get( int index )[/c] --> List (Java Platform SE 6)

könnten helfen

Vllt sogar auch Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.10 Arrays
:toll:


----------



## Shin_Sello (1. Sep 2010)

Hm, irgendwie gehts noch immer nicht...
Hier mal der ganze add und ausgabeCode:

```
public static void addFahrzeug(Fahrzeug f){
			Fahrzeugliste.add(f);
		}

	public static void gibausDB() {
		for (int i = 0; i < Fahrzeugliste.size(); i++)
			System.out.println(Fahrzeugliste.get(i).toString());
	}
```


```
case 1:
			System.out.println("Möchten sie ein Auto(1), ein Motorrad(2) oder ein LKW(3) hinzufügen?");
			int eingabeint = Integer.parseInt(sc.nextLine());
			if(eingabeint == 1){
			System.out.println("Geben sie den Namen des Herstellers ein");
			String hersteller = sc.nextLine();
			System.out.println("Geben sie die maximale Leistung in ps an.");
			int leistung = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die maximalen Km/h an.");
			int maxkmh = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die Anzahl der Reifen an.");
			int reifen = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die Anzahl der Türen an.");
			int AnzahlderTueren = Integer.parseInt(sc.nextLine());
			Datenbank.addFahrzeug(new Auto(hersteller, leistung, maxkmh, reifen, AnzahlderTueren));}
			
			else if(eingabeint == 2){
			System.out.println("Geben sie den Namen des Herstellers ein");
			String hersteller = sc.nextLine();
			System.out.println("Geben sie die maximale Leistung in ps an.");
			int leistung = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die maximalen Km/h an.");
			int maxkmh = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die Anzahl der Reifen an.");
			int reifen = Integer.parseInt(sc.nextLine());
			Datenbank.addFahrzeug(new Motorrad(hersteller, leistung, maxkmh, reifen));}
			
			else if(eingabeint == 3){
			System.out.println("Geben sie den Namen des Herstellers ein");
			String hersteller = sc.nextLine();
			System.out.println("Geben sie die maximale Leistung in ps an.");
			int leistung = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die maximalen Km/h an.");
			int maxkmh = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die Anzahl der Reifen an.");
			int reifen = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie die Anzahl der Türen an.");
			int AnzahlderTueren = Integer.parseInt(sc.nextLine());
			System.out.println("Geben sie das maximal Gewicht der Ladung in kg an.");
			int maxkgLadung = Integer.parseInt(sc.nextLine());
			Datenbank.addFahrzeug(new LKW(hersteller, leistung, maxkmh, reifen, AnzahlderTueren, maxkgLadung));
			System.out.println("Das Fahrzeug wurde erfolgreich hinzugefügt!");
			}
			printmenue();
			break;
		case 2:
			Datenbank.gibausDB();
			break;
```


----------



## eRaaaa (1. Sep 2010)

Okay, vllt fangen wir nochmal von vorne an:

Was genau heißt "funktioniert nicht" oder "geht noch immer nicht" ?


```
System.out.println(Fahrzeugliste.get(i).toString());
```
 <-- Hast du die toString-Methodne in den Klassen Auto,Motorrad und LKW überschrieben? 
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 10.2 Object ist die Mutter aller Klassen


----------



## Shin_Sello (1. Sep 2010)

Hm, also wenn ich ein Fahrzeug hinzugefügt habe und dann auf die Ausgabe gehe, gibt es mir nix aus.

Ja ich habe die toString Methode in allen Klassen überschrieben.

mfG Shin

Edit:
Damit es keine Missverständnisse gibt, es gibt mir beim adden schon alles aus, aber bei dem ausgeben der ArrayList nicht.

MfG
noch ein edit   :
Ich hab den Fehler gefunden...
Es ist eigentlich ziemlich peinlich...
Ich hab die {} bei der for schleife vergessen -.-

Nja, aber danke für die Hilfe

MfG Shin


----------



## Shin_Sello (2. Sep 2010)

Ich hab mir gedacht es sei unnötig einen neuen Thread aufzumachen, also hab ichs hier gepostet...

Mein Code:

```
public static void IndexAusgabe(int i){
		System.out.println(Fahrzeugliste.get(i));
```


```
System.out.println("Geben Sie den Index ein.");
			int i = Integer.parseInt(sc.nextLine());
			System.out.println("Das Fahrzeug an der Stelle " + i + " ist " + Datenbank.IndexAusgabe(i));
			break;
```

Ich wollte nach der eingabe einer Zahl(der Nummer im Index) das dort gespeicherte Objekt ausgeben...

Es sagt mir nur:
The operator + is undefined for the argument type(s) String, void

Hilfe bitte ;(

MfG


----------



## eRaaaa (2. Sep 2010)

In deiner Methode 
	
	
	
	





```
public static void IndexAusgabe
```
 gibst du ja auch gar nicht das Fahrzeug zurück(sondern nichts - void!!), sondern gibst es ja einfach nur aus!

Du musst dich entscheiden was du nun machen willst, ausgeben oder zurückgeben.!

Du könntest die Methode umändern zu so etwas wie 
	
	
	
	





```
getVehicle(int index) return Fahrzeugliste.get(index);
```

Oder eben in deinem zweiten Code nur

```
System.out.print("Das Fahrzeug an der Stelle " + i + " ist ");
Datenbank.IndexAusgabe(i);
```

so halt...


----------



## Shin_Sello (2. Sep 2010)

Danke ^^

Die 2te Lösung war das was ich meinte ^^

MfG Shin


----------



## Shin_Sello (2. Sep 2010)

Sorry erstmal das ich so nervig bin ^^

Aber ich hätt noch ein Problem...

Alsooo, ich habe versucht meine Datenbank in eine Textdatei zu speichern und dann zu lesen.

Das speichern funktioniert...

Aber wenn ich es lesen will und dann die DB ausgebe zeigt es mit nix an...

Hier mal der Code:


```
public static void FileLesen() throws FileNotFoundException, IOException {
		try {
			BufferedReader in = new BufferedReader(new FileReader(
					".\\output\\DatenbankFile.txt"));
			boolean istDa = true;
			while (istDa) {
				String s = in.readLine();
				if (s != null) {
					s += in.readLine();
				} else {
					istDa = false;
					in.readLine();
				}
			}
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
```

Und hier aus dem Konsolenmenü der aufruf:

```
try {
				Datenbank.FileLesen();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
```

Danke im Vorraus ^^


MfG Shin


----------



## eRaaaa (2. Sep 2010)

Shin_Sello hat gesagt.:


> Aber wenn ich es lesen will und dann die DB ausgebe zeigt es mit nix an...



Was soll es auch anzeigen? Du hast dort weder ein System.out, noch speicherst du die eingelesenen Daten irgendwo?! Du machst ja quasi mit dem gelesenen String nichts...

```
String s = in.readLine();
				if (s != null) {
					s += in.readLine();
```
Was soll das genau machen? ;/
Wie die Daten jetzt in der Datei stehen hast du auch nirgends erwähnt(oder?)


----------



## Shin_Sello (2. Sep 2010)

Naja, eigentlich sollte es das ganze nur in die Datenbank einlesen. Mit einer anderen Methode(Ausgabe der Datenbank) sollte die geladene Datei anschaubar sein.

Also, ich habe es gespeichert und jetzt ein Textfile dessen inhalt wie folgt aussieht:
Art des Fahrzeugs: Auto, Hersteller: BMW, Leistung: 100, Maximale Km/h: 10, Anzahl der Reifen: 1, Türen: 2

Wenn ich es aber laden will mit der Methode "FileLesen", und dann ausgeben will mit einer anderen Methode("gibausDB"), dann zeigt es mit nix an, also ist die DB noch immer leer.

MfG Shin


----------



## eRaaaa (2. Sep 2010)

Ja, weil du ja auch nirgends Objekte von Fahrzeug/LKW etc. erstellst und diese in der "DB" ablegst? Du liest nur die Datei, das wars. Die fügen sich ja nicht von selbst in deine DB hinzu wenn du das nicht programmierst 
Da fehlt ja also irgendwas in der Form von Datenbank.addFahrzeug(new Fahrzeug(gelesenerStringDerEvtl.VorherGesplittetWerdenMuss));

Hoffe ich hab dich jetzt auf die richtige Spur geleitet :>

Wenn in der Textdatei keine lesbaren Strings enthalten sein müssen, wäre es evtl. eine weitere Möglichkeit die Liste einfach zu serialisieren....


----------



## Shin_Sello (2. Sep 2010)

Ah, ich verstehe der String Tokenizer...

Ich hab mal einen erstellt, dass ganze schaut jetzt so aus:


```
public static void FileLesen() throws FileNotFoundException, IOException {
		try {
			BufferedReader in = new BufferedReader(new FileReader(
					".\\output\\DatenbankFile.txt"));
			boolean istDa = true;
			while (istDa) {
				String s = in.readLine();
				if (s != null) {
					s += in.readLine();
					StringTokenizer st = new StringTokenizer(s);
				     while (st.hasMoreTokens()) {
				     }

				} else {
					istDa = false;
					in.readLine();
				}
			}
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
```

Ich weiß aba nicht so ganz wie ich das in eine Fahrzeug umwandle...

Ich bräuchte keinen direkten Code, aber vlt noch ein Tipp wäre gut 

MfG Shin


----------



## eRaaaa (2. Sep 2010)

Shin_Sello hat gesagt.:


> Ich bräuchte keinen direkten Code, aber vlt noch ein Tipp wäre gut



Wüsste nicht was man da jetzt noch weiter als Tipp geben kann ausser dass du eben deinen String auseinander nehmen musst und daraus ein Objekt erstellen musst(dein Format(String) wie du das Fahrzeug speicherst ist da schon ziemlich eklig(aber natürlich auch machbar) und erleichtert die Sache nicht wirklich. Hättest du ein Format wie:
Auto, BMW,100, 10, 1,  2
)
wäre das sicherlich etwas leichter. Ansonsten wie schon gesagt: serialisiere die Liste einfach, dann ließe sich diese auch leicht wieder 1:1 deserialisieren, aber ka, ob die Datei eben lesbar sein soll!

Hier wird auch niemand mehr reinschauen wenn der Thread als "Erledigt" markiert ist.
Vllt wäre es gut, einen neuen zu erstellen indem du genau erklärst wie deine Datei aussieht, wo dein Problem ist, was du machen willst etc.
Dann wird das kein Gespräch nur zwischen uns


----------

