Erste Schritte if-Anweisung in for- oder while-schleife umwandeln

samythekid

Neues Mitglied
Hey,

ich habe den folgenden Code fürs erzeugen eine Reihe von zufälligen Integer-werten von 1 bis 9 (jede zahl darf nur einmal auftauchen also keine Duplikate erlaubt!) geschrieben:
Code:
int[] a = new int[9];
int m = 0;
while (m != 9) {
	int w = (int) (Math.random() * 10);
	if (a[0] != w && a[1] != w && a[2] != w && a[3] != w && a[4] != w && a[5] != w && a[6] != w && a[7] != w && a[8] != w) {
		a[m] = w;
		m++;
	}
}
for (int value : a) {
	System.out.print(value + "  ");
}

meine Frage ist: wie kann ich die ganz lange if in einer Schleife umwandeln?

Grüße
Sammy
 
Gibt verschiedenste Ansätze. Am saubersten ist es wohl wenn du dir eine Hilfsmethode

Code:
boolean contains (int[] array, int number)

schreibst, welche eben mittels einer for-Schleife alle Fächer des Arrays gegen die übergebene Zahl abgleicht, und true returned sobald die Zahl gefunden wurde (Ansonsten false). Dann kannst du deine fette if-Anweisung ersetzen durch ein einfaches
Code:
if(!contains(a,w))

Wenn du die for-Schleife nicht in eine Methode auslagern willst, dann würde sich hier sogar ein Code Label anbieten. Ich weiß ich werde gleich in der Luft zerissen wenn ich dir den folgenden Code zeige, aber ich steh da drüber 😀

Java:
GENERATE_NUMBERS: // das nennt sich "Code Label"
   while (m != 9) {
	int w = (int) (Math.random() * 10);
	for(int i = 0; i<a.length; i++){
           if(a[i] == w){
               continue GENERATE_NUMBERS; // abbrechen, und neue Zahl würfeln
           }
        }
        a[m] = w;
        m++;
   }

edit: Irgendwie verkackt er grad die Code-Einrückung. In meinem Post ist es korrekt, hier wird's falsch eingerückt. Also achte gut auf die Klammern, das a[m] = w und m++ kommt nach der gesamten for-Schleife.
 
Zuletzt bearbeitet:
Oder einfach ein Set verwenden.
Oder einfach alle Zahlen in eine Liste stecken (Arrays.asList(1,2,3,4,5,6,7,8,9) und dann Collections.shuffle oder eben selbst irgendwie wild durchmischen, dann terminiert das Programm auch 100% 😛
 

Zurück
Oben