Kann ich ein 2-dimensionales Array in ein 1-dimensionales Speichern?
Wenn nein, wie wandle ich ein 2-dimensionales Array so um, dass es in ein 1-dimensionales passt?
Ich hoffe ihr könnt mir helfen!
Ja, ich habe es versucht aber dann kommt die Fehlermeldung Java.lang.ArrayIndexOutOfBoundsExeption: 3
Dadurch dass ich in ein Feld eines eindimensionalen Arrays ein komplettes 2-dim. speichern will habe ich es so versucht:
Code:
for (int generations = 0; generations < 100; generations++)
{
spielfeld = nextGeneration(spielfeld);
for (int i = 0; i < spielfeld[0].length; i++)
{
for (int j = 0; j < spielfeld.length; j++)
{
menu[generations] = spielfeld[i][j];
}
}
Out.println(menu[generations]);
}
Es geht nämlich um das Spiel GameOfLife, vllt. kennt ihr das, auf jeden Fall muss ich dann ein 1-dim. Array mit der Länge 100 machen und in dieses kommen 100 versch. Spielfelder rein, deren Werte in der Methode nextGeneration berechnet werden.
Und es handelt sich hier um den Typ boolean.
Hi,
ArrayIndexOutOfBoundsExeption heisst, dass du ein Array erstellen willst, dass über die Grenzen des initialisierten Array geht.
Wenn du z.B. schreibst:
Code:
int a[]= new int[10];
for (int i=0; i<=10; i++)
{
System. out.println(a[i]);
}
Das funktioniert nicht weil, weil das Array a von 0 beginnt und von 0 - 10 sind es 11 Arrays, also musst du in der for-schleife schreiben: i<=9
Bei deinem Code blicke ich nicht viel durch, weil da noch andere Klassen und Methoden nicht sichtbar sind oder ich habe einfach den Fehler übersehen.
Hier ersteinmal die wichtigste Klasse, die Main Klasse (die anderen funktionieren einwandfrei):
Code:
public static void main (String[]args)
{
boolean [] menu = new boolean [100];
boolean [][] field1 = readField("Spielfeld.gol");
printField(field1);
boolean[][]spielfeld = nextGeneration(field1);
printField(spielfeld);
for ( int generations = 0; generations < 100; generations++)
{
spielfeld = nextGeneration(spielfeld);
for (int i = 0; i < spielfeld[0].length; i++)
{
for (int j = 0; j < spielfeld.length; j++)
{
menu[generations] = spielfeld[i][j];
}
}
Out.println(menu[generations]);
}
}
Edit:
bei readfield werden bereits vorhandene Werte aus einer Datei eingelesen
bei printfield werden die Felder ausgegeben
bei nextGeneration wird das Spielfeld neu berechnet indem man die Anzahl der Nachbarn berechnet und das Feld entsprechend verändert (mehr als 3 nachbarn feld = false, weniger 2 nachbarn feld = false; wenn das Feld vorher false war und 2 nachbarn hat wird es true) und eben später mit false = . und true = X ausgegeben
Ich denke das Hauptproblem ist, dass ich (in meinen Fall) 12 Arrays in eines speichern will, doch ich weiß nicht wie sonst, denn ich brauche ein Menü, wo ich ein Feld vor und züruck gehen kann und wenn ich jetzt auf das 2. gehe muss das Feld in ihrem 2. Zustand zu sehen sein. Beim 10. nach der 10. Veränderung usw.!
@Reality
Ja, ich habe auch erst im September 2003 mit Programmieren angefangen