# Autohaus-Bestellungen



## Darkest_Sun (2. Jun 2011)

Moin Leute,

Ich habe folgendes Problem. Ich hab eine Datei die ich einlese in denen Bestellungen einzelner Autohäuser sind.
Die Txt sieht so aus:

Autohaus1:3xAudi
Autohaus2:4XMercedes
Autohaus1:3XRenault
Autohaus1:1xAudi
Autohaus1:1xMercedes
usw
usw

d.h. willkürlich einfach Bestellung der Autohäuser

Ich möchte jetzt ein Array erstellen das den Bedarf der Autohäuser zusammenfasst.

Also
BedarfAutohaus1:
Audi 4 
Renault 3 
Mercedes 1 


BedarfAutohaus2:
...

Ich habe einen Code geschrieben. Da funzt das erstellen des Arrays bzw der Array List aber nicht. Kann mir da irgendjemand helfen??

DAnke schonmal




```
while(Line.ready()) 
			{	
				String Zeile = Line.readLine();
				ArrayList<CMaterial> BedarfAutohaus = new ArrayList<CMaterial>(); // ArrayList anlegen 
				String[] ZeileGeteilt = Zeile.split(":"); 	// String teilen				
				String[] Bedarf = ZeileGeteilt[1].split("x");	//2. String bei x teilen
				
				
				// Durch jedes Autohaus gehen und ueberpruefen, ob der Name mit dem in der Bestellung uebereinstimmt 
				for (CAutohaus Autohaus : m_Autohaus)
				{
					if (Autohaus.m_Name.contains(ZeileGeteilt[0])) // uebereinstimmung
					{
					
						
					BedarfAutohaus.add(new CMaterial (Bedarf[1], Integer.parseInt(Bedarf[0]))); // Reinschreiben
						
					}
				}
			}
			
			Line.close();
		}
		
		catch (Exception e)
		{
			// Fehlerbehandlung
		}
	}
}
```


----------



## Gast2 (2. Jun 2011)

Fliegt ne exception?
schreib zumindest nen e.printStackTrace(); in den catch block.


----------



## Darkest_Sun (2. Jun 2011)

Jo schreib ich rein.
Eine Exception tritt allerdings nicht auf. Er läuft ganz normal, sortiert einfach das Array irgendwie falsch.
Also nicht so wie gedacht


----------



## Gast2 (2. Jun 2011)

Oben schreibst du deine Liste wird nicht gefüllt. Jetzt schreibst du dass die Sortierung nicht passt.
Was denn nun?


----------



## Darkest_Sun (2. Jun 2011)

Ok eben falsch ausgerdrückt. Die Sortierung ist ja vollkommen egal.

Ich möchte einfach nur ein Array bzw die ArrayList haben

BedarfAutohaus1:
Audi 4 
Renault 3 
Mercedes 1 


BedarfAutohaus2:
...
...

D.h. er soll einfach überprüfen ob der Name in der Bestellung mit dem Autohaus übereinstimmt und wenn ja soll er in die ArrayList Bedarf des Autohauses die Bestellung hinzufügen. So das ich aus einer txt mit allen Buntgemischten Bestellungen, eine ArrayList für jedes Autohaus bekommen.

Weißt du was ich mein?
Verzweifel dadran schon seit mehreren Stunden.
Hoffe du/ihr könnt mir helfen:/


----------



## Crian (3. Jun 2011)

Zeig doch mal deinen Code und einen Ausschneitt aus einer Eingabedatei, dann kann man dir besser helfen.

Davon ab sollten Variablen mit einem Kleinbuchstaben beginnen, siehe Naming conventions.


----------



## SlaterB (3. Jun 2011)

drei Postings mit belanglosen Blahblah wie wie 'verzweifle, funzt nicht, helfen, gedacht' aber Informationen zum Programm schreibst du kaum welche

bei jedem Schleifendurchlauf erstellst du eine Liste BedarfAutohaus, diese Liste wird aber nicht gemerkt,
in der Schleife in Zeile 10 wird sie vielleicht gefüllt, vielleicht auch nicht, aber was macht das für einen Unterschied?

was soll aus BedarfAutohaus werden, wird das irgendwann irgendwo für eine Ausgabe benutzt, wie sieht dein grundlegendes Konzept aus?
('habe keins' zählt nicht  )


----------



## Darkest_Sun (3. Jun 2011)

Also:

Ich habe eine BestellDatei und eine LagerDatei.

Bestelldatei ist eine txt die so aussieht:

Autohaus1:1xAudi
Autohaus2:4xMercedes
...
...

LagerDatei: 
Lager1:5xBMW:1xMercedes
Lager2:3xAudi:1xRenault
...
...

Diese beiden Txt möchte ich auslesen.
Die Strings werden also gesplittet bei den ":" und den "x"

ich möchte beim Auslesen der Datei also ArrayListen erstellen. Anschließend möchte ich für jedes Lager einen Lagerbestand ahben und für jedes Autohaus eine Bestellung (zusammengefasst)

Anschließend möchte ich diese Listen dann vergleichen.

z.b. Gucken welches Lager irgendetwas hat was Autohaus 1 braucht.


Hoffe das ist so verständlich?!

das Array/Arrayiste brauch ich auf jedenfall zum weiterarbeiten.


----------



## SlaterB (3. Jun 2011)

Auflistung der Wünsche ist leider keine legitime Frage, verschoben nach Hausaufgaben

ein Tipp: speichere die Listen pro Autohaus in einer weiteren Liste oder gar einer Map falls bekannt, 
in jeder Zeile der Datei nicht unbedingt eine neue Liste anlegen, sondern erst schauen ob zum Autohaus eine da ist 

mit [c]for (CAutohaus Autohaus : m_Autohaus)[/c] machst du das vielleicht bereits,
poste evtl. mehr Code davon, was ist m_Autohaus eigentlich, wann wird das befüllt usw,


----------



## Darkest_Sun (3. Jun 2011)

Ok ich werde mich mal dran versuchen und melde mich dann Vielen Dank schonmal


----------



## ChrisKu (3. Jun 2011)

Slater_B hat schon recht, es ist recht schwer, Dein Problem wirklich zu verstehen.

Wenn ich Deinen Code richtig lese, erstelltst Du bei jeder gelesenen Zeile eine neue ArrayList "BedarfAutohaus", da sind Deine in der vorherigen Zeile zu der ArrayList hinzugefügten Daten natürlich weg. Die Deklaration von BedarfAutoHaus muss auf jeden Fall aus der Schleife raus.


```
ArrayList<CMaterial> BedarfAutohaus = new ArrayList<CMaterial>(); 
while....{
    //
}
```


----------



## Darkest_Sun (3. Jun 2011)

Das klingt auf jeden Fall logisch

Aber wenn ich es davor ziehe, wird dann nicht nru eine einzige ArrayList erstellt?
und da immer weiter hinzugefügt unabhängig davon um welches Autohaus es geht?

Viele Grüße

Sun


----------



## ChrisKu (3. Jun 2011)

> Aber wenn ich es davor ziehe, wird dann nicht nru eine einzige ArrayList erstellt?
> und da immer weiter hinzugefügt unabhängig davon um welches Autohaus es geht?


So ist es, aber Du hattest am Anfang ja auch geschrieben



> Ich möchte jetzt ein Array erstellen das den Bedarf der Autohäuser zusammenfasst.



Oder möchtest Du eine ArrayList pro Autohaus?


----------



## Darkest_Sun (3. Jun 2011)

Ja auf jedenfall pro Autohaus! Dann hatte ich mich wohl falsch ausgedrückt. Sry.

Genau das ist das Ziel, gleichzeitig gerade auch mein problem 

Für jedes Autohaus und für jedes Lager soll jeweils eine ArrayList erstellt werden.


----------



## ChrisKu (3. Jun 2011)

Ja auf jedenfall pro Autohaus!

Ok, dann erstelle doch erstmal ein Map mit einer ArrayList pro Autohaus, z.B so ähnlich


```
java.util.Map<String, ArrayList> myMap = new HashMap<String, ArrayList>();
String[] names = new String[]{"Name 1", "Name 2", "Name 3"};
for (String name:names){
      myMap.put(name, new ArrayList());
}
```

In Deiner while() Schleife holst Du Dir dann die entsprechende ArrayList und fügst Deine Daten hinzu:


```
while...
//
ArrayList bedarfAh = myMap.get(zeileGeteil[0]);
bedarfAh.add(...)
//
```


----------



## Darkest_Sun (3. Jun 2011)

Alles klar versteh ich soweit 

und wo muss ich dann die bedarfAh ArrayListen definieren damit ich auf alle zugreifen kann?


Wenn ich den Code richtig versteh dann holt er sich in der while-SChleife die ArrayListe aus der Map die passend zum Namen ist.

Wirdc durch die While-Schleife jetzt aber nicht jede ArrayList bedarfAh genannt?
d.h. ich hab nachher wieder nur eine Liste?

oder versteh ich das falsch?

Vielen Dank für die Hilfe


----------



## ChrisKu (3. Jun 2011)

> und wo muss ich dann die bedarfAh ArrayListen definieren damit ich auf alle zugreifen kann?



Vor der while() Schleife



> Wenn ich den Code richtig versteh dann holt er sich in der while-SChleife die ArrayListe aus der Map die passend zum Namen ist.



Korrekt, zumindest wenn Du sie richtig benannt hast. 



> Wirdc durch die While-Schleife jetzt aber nicht jede ArrayList bedarfAh genannt?
> d.h. ich hab nachher wieder nur eine Liste?



Nein, da wird nix umbenannt. BedarfAh ist nur ein Verweis  auf eine ArrayList in myMap. Und diesen Verweis kannst Du in jedem Schleifendurchlauf ändern, da Du ja über myMap.get(....) wieder an die ArrayList, die Du benötigst, herankommst.


----------



## Darkest_Sun (3. Jun 2011)

Ok, heißt also das die ArrayListe gefüllt wird und dann wieder in die Map gespeichert wird? und ich greife dann auf die Map zu später wenn ich die Liste haben will?


Vielen Dank

Ich werds versuchen so umzuschreiben


----------

