Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo!
Ich will ein 3x3 Array .. also ein zweidimensionales Array mit der Länge 3 mehr oder weniger zufällig belegen .. mit den Zahlen von 0 bis 8. Es darf aber keine Zahl doppelt vorkommen.
Ich habe mir nun gedacht ich befülle das Array einfach mal mit ner Zufallszahl von 0 bis 8 (mit (int)(Math.Random()*8) .. und überprüfe dann ob die Zahl vorher auch wirklich noch nie verwendet wurde, sonst belege ich es so lange zufällig neu, bis die Zahl "neu" ist.
Das ist viel Aufwand, das weiß ich, aber ich denke bei 3x3 ist es zu verschmerzen ...
Mein Code sieht folgendermaßen aus:
Java:
(int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
spielfeld[i][j] = (int)(Math.random()*8);
for (int x = 0; x < i; x++) {
for (int y = 0; y < j; y++) {
while (spielfeld[x][y] == spielfeld[i][j])
spielfeld[i][j] = (int)(Math.random()*8);
}
}
if (spielfeld[i][j] == 0) {
position1 = i;
position2 = j;
}
}
}
... die Position der 0 muss ich mir merken.
Mein Problem ist aber, dass das Array, das dabei entsteht zwar immer zufällig Zahlen von 0 bis 8 enthält, aber nie alle sondern auch welche doppelt vorkommen. Wo liegt der Fehler?:bahnhof:
Danke. Hab mich jetzt ein wenig gespielt und verschiedene Sachen damit ausprobiert ... Aber er sagt mir jetzt nach mehreren versuchen immer noch dass er die Methode shuffle nicht findet?
Collections.shuffle kann nicht auf einen Array angewendet werden. Die ursprüngliche Methode funktioniert nicht, weil ... ähja diese inneren Schleifen da machen einfach keinen Sinn :bahnhof: (Übersichtlicher wäre es vielleicht mit einer Methode wie
Code:
private static boolean arrayAlreadyContains(int array[][], int value) { ... }
)
Die einfachste Lösung wäre wohl sowas wie
Code:
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i<3*3; i++) list.add(i);
Collections.shuffle(list);
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
spielfeld[x][y] = list.get(x*3+y);
}
}
Alternativ ein eigenes "shuffle" für einen 2D-int-array schreiben.
Nach langem googlen hab ich das auch herausgefunden aber danke!!
ich hatte den Code jetzt so ähnlich..
hab die ArrayList auch mit 0 bis 8 befüllt und dann gemischt.
aaber ... warum nehme ich
list.get(x*3 + y) ???
das ergibt für mich keinen sinn, mal abgesehen davon, dass es funktioniert ... gibts da eine logische erklärung?