Java Random

REC

Bekanntes Mitglied
Ich habe hier ein Problem,aber irgendwie scheitere ich.Ich denke es ist ein überlegungsfehler.

Die Klasse random() gibt mir eine zufällige int Zahl zwischen,0 und 10.

Diese Zahl ruft dann in einer ArrayList eine Position auf.
WIe kann ich nun verhindern das 2x hintereinander die selbe Zahl verwendet wird?
Ich hab hier eine kleine Idee ,logischweise funktioniert sie nicht.Denn bei der ersten if schleife kennt das Programm die Zahl zufallsZahl noch gar nicht,wenn das Programm zum ersten mal ausgeführt wird.
Java:
public Icon zufallsBild(boolean ergebnis) {

        int temp = zufallsgenerator.nextInt(10);
        System.out.println(temp);
        if (temp != zufallsZahl) {

            if (ergebnis) {
                //zufallsZahl = temp;
                return (guteListe.get(temp));

            } else {
                //zufallsZahl = temp;
                return (schlechteListe.get(temp));

            }

        } else {
            zufallsBild(ergebnis);
            return null;
        }
    }
 
Du könntest folgendes versuchen:
Java:
...
int zufallsZahl = -1;
...
public Icon zufallsBild(boolean ergebnis) {

	int temp;
	while ((temp = zufallsgenerator.nextInt(10)) == zufallsZahl) {
	}
	zufallsZahl = temp;
	if (ergebnis) {
		return (guteListe.get(temp));
	} else {
		return (schlechteListe.get(temp));
	}

}

Bei dir ist das Problem, dass du in Zeile 18
Code:
 return zufallsBild(ergebnis);
schreiben müsstest. Und natürlich die Zufallszahl wieder speichern.

P.S. du bekommst übrigens höhstens eine 9
 
Zuletzt bearbeitet:
Hi 😉

Wenn du eine überschaubare Anzahl an Zufallszahlen hast, dann initalisiere ein array[0...x] und shuffel es:

array.shuffel()

anschließend iterierst du durch das array.

Gruß

marcinek
 
@XHelp

Natürlich funktioniert deine Version einwandfrei.
Aber ich habe nochmal meine Version probiert,denn das mit dem "-1" um die Variable "zufallsZahl" zu initialisieren.Naja wie es aussieht funzt diese nun auch.Aber es isch schwierig zu sagen,denn ich weiss ja nie ob das im Hintergrund wirklich so hinhaut.
Oder ob jetzt "per Zufall" nie die gleiche Zahl gleich 2x hintereiander kommt.

Du denkst aber das mein Code so nicht funktionieren kann?

Ach ja das mit 10 weiss ich.Es steht ja,das diese Zahl in der Klammer exklusiv ist

*Update*
Nein sie tut nicht,jetzt ist wieder 2x "3" gekommen.Nehm ich eben deine Version.
Und ich weiss nun auch wie ich sie testen kann.Er soll nur die Zahlen 0 und 1 nehmen.Das heisst wenn es funktioniert sollten sich die Bilder immer abwechslen.



@Marcinek
Danke für die Antwort.Wusste ich gar nicht,super wieder was dazugelernt🙂
Aber mein Problem ist es ja das niemals die gleiche Zahl hintereinander kommt.
 
Zuletzt bearbeitet:
Hall REC,

wenn du ein Array nimmst mit X zahlen und dann

1,2,3,4,5,6,7,8 hast, dann shuffelst du das und dann taucht immer jede Zahl nur einmal auf.

Gruß,

Marcinek
 
Ok,aber wenn ich jetzt angenommen immer nur die nullte Position aus der Array nehme würde,kann es doch sein,das 2x der gleiche Wert auf der Position 0 ist?
 
Aber du läufst doch von 0 bis n das array hoch. Wir nennen das iterieren.

also

Java:
1.

for(int i = 0; i < array.length; i++) {
 array[i] = i;
}

2. 
array.shuffle ();

3.
for(int i = 0; i < array.lenght; i++) {
   zufallszahl_i = array[i];
}
 
also jetzt nur kurz für mein Verständnis:

- du hast eine ArrayList
- willst darin mit Hilfe eines zufälligen Index einen Wert holen
- ein Wert soll niemals 2x geholt werden und somit auch niemals 2x der gleiche Index zufällig bestimmt werden

falls ich damit richtig liege, frage ich mich, warum du nicht einfach die ArrayList mischt (Collections.shuffle(deineListe)) und dir den ganzen Zufallskram sparst.
 
@nrg
Ja genau so wollte ich das machen.

Naja ich wusste nicht das es das mit Shuffle gibt.Habt das daher von Hand geschrieben.

Ich habe es jetzt so wie oben gemacht.Und es funktioniert nun.Ich hatte das mit dem return falsch gemacht.

Das nächste mal werde ich das mit Shuffle benutzen.

Danke an euch alle🙂
 
- ein Wert soll niemals 2x geholt werden und somit auch niemals 2x der gleiche Index zufällig bestimmt werden

@nrg
Ja genau so wollte ich das machen.

Oben steht das aber nochmal ganz anders

WIe kann ich nun verhindern das 2x hintereinander die selbe Zahl verwendet wird?

Was willst du denn jetzt genau? Soll die Zufallszahlenfolge 1, 5, 6, 8, 5 zugelassen werden oder nicht?
 
Nein ich wollte einfach nicht das so eine Kombination möglich ist,6,7,5,5,6,4.
Also 2 mal 5 hintereinander.Nachher ist es gleich wenn 5 nochmal kommt.
 
Dann passt das mit dem shuffle nicht so ganz, dadurch kannst du nur einmalig in einer zufälligen Reihenfolge komplett durch die Liste gehen.
 
Wie wärs denn damit?

Java:
import java.util.Random;

public class Main {

    private static Random random = new Random();
    private static int lastRandom = -1;
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            System.out.println(nextInt(10));
        }
    }

    private static int nextInt(int max) {
        int res;

        do {
            res = random.nextInt(max);
        } while (res == lastRandom);

        lastRandom = res;

        return res;
    }
}

EDIT:
Bau zur sicherheit vllt noch ne abbruchbedingung in die while schleife so dass er nach x durchläufen oder x ms abbricht.
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben