# mit Schleife ein Array mit Objekten füllen



## Hellfish123 (8. Dez 2008)

Hallo,

ich habe eine Datein mit mehreren Datensätzen. (Vokabelpaare -> deu; eng).

mit dem Scanner öffne ich die Datei und lese die Anzahl der Einträge mit einer Schleife aus.
So weit, so gut.

Nun will ich aber ein Array mit sovielen Feldern, wie ich Vokabelpaare habe anlegen und in dieses Array Objekte speichern.
Wie das funktioniert weiss ich zwar, aber es geht anscheinend nicht mit einer Schleife.



```
Vokabeln[] Vokabelliste = new Vokabeln[vokabelpaare];

    Scanner file = new Scanner(new File("data/Vokabeln.txt"));
    file.useDelimiter( ";");

    for (int i = 0; (file.hasNext()); i++)
    {
      Vokabelliste[i] = new Vokabeln(file.next(),file.next());
    }
    file.close( );
```

Dazu sei ncoh gesagt, dass es noch eine Klasse Vokabeln gibt, in der das deutsche und englische Wort, sowie noch einige andere Sachen angelegt werden.

Kann mit jemand sagen, wieso ich das Array Vokabelliste in der Schleife füllen kann?

Danke für eure Hilfe!


----------



## 0x7F800000 (8. Dez 2008)

> Scanner


"file" ist ein äußerst irreführender bezeichner für einen scanner, soll das der Verwirrung von Volksfeinden dienen oder was?


> Wie das funktioniert weiss ich zwar, aber es geht anscheinend nicht mit einer Schleife.


"geht ned" gibt es nicht. Entweder muss der compiler irgendwelche konkrete Fehlermeldungen angeben, oder die Runtime muss meckern, oder das resultat muss sich in irgendeiner konkreten art und weise vom gewüschten unterscheiden. "geht ned"... was ist denn das bitte für eine Problembeschreibung?



> Kann mit jemand sagen, wieso ich das Array Vokabelliste in der Schleife füllen kann?


natürlich kannst du das, wieso solltest du das nicht können?

erklär mal kurz & konkret was dein problem ist, an einem nicht compilierbaren codestück kann man meistens nicht so wirklich viel erkennen.


----------



## Hellfish123 (8. Dez 2008)

Vielen Dank für diese äußerst nette Antwort.

um etwas genauer zu werden: der Compiler meckert nicht. Ich fülle auch das Array mit Objekten, allerdings steht in jedem Objekt im Array der zuletzt eingelesene Wert. Sprich: statt 13 unterschiedlichen Objekten bekomme ich 13 mal das gleiche Objekt. Und zwar steht in allen das zu letzt eingetragene!

Verständlicher?


----------



## 0x7F800000 (8. Dez 2008)

joah, schon etwas verständlicher, allerdings sehe ich bei der oberflächlichen inspektion erstmal nicht, woran das liegen könnte...


```
import java.util.Scanner;

public class ScannerDelimiterTest {

	public static void main(String[] args) {
		
		//wo du dein input herbekommst, soll egal sein
		String input="wo;ich;ni;du;ta;er;shi;sein;ren;Mensch;guo;Land";
		
		//statt Vokabeln-Objekt hab ich einfach ein 2er String array genommen
		String[][] array=new String[6][];
		
		//scanner genau wie bei dir
		Scanner scanner=new Scanner(input);
		scanner.useDelimiter(";");
		
		//exakt genauso einlesen
		for(int i=0; scanner.hasNext(); i++){
			array[i]=new String[]{scanner.next(), scanner.next()};
		}
		
		//zum test ausgeben
		for(String[] entry: array){
			System.out.printf("%15s\t%15s\n",entry[0],entry[1]);
		}
	}
}
```
das ist jetzt ein "minimalbeispiel" das sich jeder wünscht, der die frage beantworten soll (nur so als anmerkung für die zukunft   )
Da steht im prinzip alles dasselbe wie bei dir, und imho ist der code zwar ziemlich gefährlich gebaut, aber im prinzip richtig und lauffähig.

Ausgabe:


> wo	            ich
> ni	             du
> ta	             er
> shi	           sein
> ...


Also, kA, kannst du irgendwelche unterschiede erkenne, bzw bist du dir sicher, dass du genau das gleiche tust, bzw bist du überhaupt sicher, dass das problem in den zeilen liegt, die du gepostet hast?


----------

