Hi,
ich schreibe gerade ein Programm für meinen Bruder, mit dem er englisch Vokabeln lernen kann (mit GUI).
Nun hab ich folgende Methode:
welche mit
aufgerufen wird (englisch_vok ist die Classe der obrigen Methode
).
Was soll diese Methode machen? Es soll zufällig eine Vokabel aus dem Array vok_zufall gewählt werden und an die stelle i im Array vok_position gesetzt werden und diese Vokabel dann (durch null) in vok_zufall gelöscht werden. Falls an der stelle null steht ruft sich die Methode rekursiv mit dem aktuellen wert von i wieder auf.
Die Arrays werden mit
initialisiert.
englisch_position ist vor der obrigen Methode leer, wärend englisch_zufall mit Vokabeln befüllt ist.
Folgender fehler kommt bei dieser Methode leider:
geht noch eine weile so weiter.
60 ist :int random = randomGen.nextInt(10);
65 ist: }else{position_befüllen(vok_position,vok_zufall,i);}
Laut Debugger läuft alles so wie ich es will-sprich das Array vok_position wird komplett richtig befüllt- bis i=10 ist. Jetzt sollte er eigendlich nichts mehr machen, aber i wird dann wieder zu 9->10->9->10->9->(...) usw.
Nur ich hab keine Ahnung warum.
Wenn ich den Teil weglasse, der dafür da ist, dass keine Vokabel doppelt eingetragen wird, geht alles klar, nur hab ich dann halt Vokabeln doppelt.
Btw. ich denke mal, dass meine Lösungung der Methode nicht gerade optimal ist. Ich möchte aber (später) selber Code optimierungen vornehmen, deswegen bitte keine "Spoiler" ^^' wie man es besser machen könnte.
ich schreibe gerade ein Programm für meinen Bruder, mit dem er englisch Vokabeln lernen kann (mit GUI).
Nun hab ich folgende Methode:
Java:
public static void position_befüllen(englisch_vok[] vok_position, englisch_vok[] vok_zufall, int i){
while(i<=9){
Random randomGen = new Random();
int random = randomGen.nextInt(10);
if(vok_zufall[random]!=null){
vok_position[i]=vok_zufall[random];
vok_zufall[random]=null;
i++;
}else{position_befüllen(vok_position,vok_zufall,i);}
}
}
welche mit
Java:
englisch_vok.zufall_befüllen(englisch_vok.vok_zufall);
englisch_vok.position_befüllen(englisch_vok.vok_position,englisch_vok.vok_zufall,0);
Was soll diese Methode machen? Es soll zufällig eine Vokabel aus dem Array vok_zufall gewählt werden und an die stelle i im Array vok_position gesetzt werden und diese Vokabel dann (durch null) in vok_zufall gelöscht werden. Falls an der stelle null steht ruft sich die Methode rekursiv mit dem aktuellen wert von i wieder auf.
Die Arrays werden mit
Java:
protected static englisch_vok[] vok_zufall=new englisch_vok[10];
protected static englisch_vok[] vok_position=new englisch_vok[10];
englisch_position ist vor der obrigen Methode leer, wärend englisch_zufall mit Vokabeln befüllt ist.
Folgender fehler kommt bei dieser Methode leider:
Code:
Exception in thread "main" java.lang.StackOverflowError
at englisch_package.englisch_vok.position_befüllen(englisch_vok.java:60)
at englisch_package.englisch_vok.position_befüllen(englisch_vok.java:65)
at englisch_package.englisch_vok.position_befüllen(englisch_vok.java:65)
at englisch_package.englisch_vok.position_befüllen(englisch_vok.java:65)
(...)
60 ist :int random = randomGen.nextInt(10);
65 ist: }else{position_befüllen(vok_position,vok_zufall,i);}
Laut Debugger läuft alles so wie ich es will-sprich das Array vok_position wird komplett richtig befüllt- bis i=10 ist. Jetzt sollte er eigendlich nichts mehr machen, aber i wird dann wieder zu 9->10->9->10->9->(...) usw.
Nur ich hab keine Ahnung warum.
Wenn ich den Teil weglasse, der dafür da ist, dass keine Vokabel doppelt eingetragen wird, geht alles klar, nur hab ich dann halt Vokabeln doppelt.
Btw. ich denke mal, dass meine Lösungung der Methode nicht gerade optimal ist. Ich möchte aber (später) selber Code optimierungen vornehmen, deswegen bitte keine "Spoiler" ^^' wie man es besser machen könnte.