Problem mit Java Array!

Spaceman85

Mitglied
Hallo habe hier Zwei Klassen

Klasse Field:
Java:
public class Field implements de.miniopoly.Field{

static String fieldType;

public Field(String fieldType){
this.fieldType=fieldType;
}}
Klasse BoardControllerImpl:
Java:
public class BoardControllerImpl{
Field[] fields;// = new Field[41];
static String[] test = new String[41];

Field feld = new Field("h");
public BoardControllerImpl(Field[] fields){
this.fields=fields;
}



void readStreets() throws IOException{
FileReader reader = new FileReader("res/streets.txt");
BufferedReader buffer= new BufferedReader(reader);
try{
String s ;

for (int i=0;( s= buffer.readLine()) != null;i++){

fields[i].fieldType=s;
// System.out.println(s + " " + i );
test[i]=s;
} 
}finally{
if(buffer != null)
buffer.close();

}}

public static void main(String[] args) throws IOException{
BoardControllerImpl b = new BoardControllerImpl(new Field[40]);
b.readStreets();
System.out.println(b.fields[0].fieldType);
}
}
Wie man erkennen kann habe ich schon einiges ausprobiert!
Die Methode readSttreets liest Zeilen aus einer textdatei ein und soll jede zeile in ein neues arrayelement des typs fields speichern, mein problem ist nun wenn ich unten in der main-methode den array aufrufe gibt er mir immer das selbe aus egal was ich als index in fields[] nehme, er gibt immer die letze zeile der textdatei aus, also was in der methode zuletzt gespeichert wurde! Wo ist mein Fehler?

Danke
 
Zuletzt bearbeitet von einem Moderator:

zerix

Hausmeister
Moderator
Hallo,

das ist auch ganz klar, dass es so ist. Du hast die Variable fieldType auf static gesetzt. Damit ist diese Variable nicht mehr an eine Instanze gebunden. Um es vereinfacht auszudrücken, alle Instanzen von Field haben nur eine Variable fieldType, sie ist überall die gleiche.
Also wenn du die Variable änderst, ändert sie sich bei allen.

Lösung: Du darfst sie nicht static machen.
Bevor du dich nachher wunder, warum dann eine NullPointerException geworfen wird. Das liegt daran, dass du dein Array nicht initialisiert hast. Du hast zwar den Speicherplatz für 40 Field-Objekte reserviert, aber jedes Field ist noch null.
Du musst für jedes Feld im Array nochmal
Code:
new Field();
ausführen.

MFG

Sascha