Zufallsreinfolge???
-
Hi leute,
wie schaffe ich es das die zahlen von 1-32 in zufälliger reinfolge angezeigt werden???
Danke schonmal,
Master X
-
Ich versuche es mal
import java.util.Random; public class RandNumb { int numb; public RandNumb(int nunb) { this.snumb = numb; } public int generateRandomNumer(int n) { Random rand = new Random(); for(i=1;i<33;++i) { int rnum = 1+rand.nextInt(n); //generiert Zufallszahlen bis n für 32 Durchläufe System.out.prinln(); } } }
(ist allerdings ungetestet)
-
Klasse java.util.Random
-
Griffin schrieb:
Ich versuche es mal
import java.util.Random; public class RandNumb { int numb; public RandNumb(int nunb) { this.snumb = numb; } public int generateRandomNumer(int n) { Random rand = new Random(); for(i=1;i<33;++i) { int rnum = 1+rand.nextInt(n); //generiert Zufallszahlen bis n für 32 Durchläufe System.out.prinln(); } } }
(ist allerdings ungetestet)
Ja das ist ja schon ganz schön aber ich brauche sowas das mir die zahlen von 1-32 ausgibt nur in einer anderen reihenfolge...
Also alle zahlen müssen vorkommen...
-
anderen reihenfolge...
Also was nun, andere Reihenfolge oder zufällige Reihenfolge?Bei zufälliger Reihenfolge musst du halt einfach nur nochmal einen Vergleich machen zwischen der erzeugten zufallszahl und den bereis vorhandenen.
-
Speicher doch in einem Array alle Zahlen, in der Klasse _Arrays_ gibt es dann bestimmt ne Methode, um des zu mischen...
-
Vorschlag:
int[] r = new int[32]; HashSet hs = new HashSet(32); IntO[] into = new IntO[32]; // Soweit ich weis, kann man dem HashSet // nur Objekte hinzufügen, also machen wir eins Random rand = new Random(); for (int i = 1; i < 33; ++i) { into[i] = new IntO(i); } while (hs.size() != 32) { hs.add(into[rand.nextInt(32)]); // Ist ein Objekt(Zahl) schon vorhanden // wird es dem HashSet nicht hinzugefügt } Iterator it = hs.iterator(); for (int i = 0; i < 32; ++i) { r[i] = ((IntO)it.next()).value; } // jetzt sollte das array mit einer zufälligen Reihenfolge von Zahlen von // 1 - 32 die je nur ein Mal vorkommen gefüllt sein
class IntO { int value; public IntO(int value) { this.value = value; } }
So, das ist vielleicht nicht die beste Methode, aber sie sollte klappen. Warum denn einfach, wenn es auch kompliziert geht?
Also natürlich wäre das einfachste, einfach das ganze Array darauf zu überprüfen ob die nächste Zufallszahl schon vorhanden ist, wie Griffin bereits sagte.
-
du willst 32 Zahlen jeweils EIN mal in beliebiger Reihenfolge haben?
Dann auch ein Vorschlag von mir (was du in den header einbinden musst, wurde ja schon gepostet)
Die Klasse wo du dir unter anderem die benutzen zahlen merkst
class cZahlen { int[] UsedZahlen = new int[32]; int ActDurchlauf; int MaxZahl; int Zaehlen(int RandZahl) { int ActZahl = RandZahl; return ActZahl; } }
Die Deklarierung der Klasse und einer Hilfsvariable
cZahlen Zahlen = new cZahlen(); int ActuelleZahl;
Werte setzen:
Zahlen.MaxZahl = 32; ActuelleZahl = Zahlen.Zaehlen(generator.nextInt(Zahlen.MaxZahl)); Zahlen.ActDurchlauf = 1; Zahlen.usedZahlen[0] = ActuelleZahl;
So, und jetzt per Durchlauf (z.B. durch einen Button-Klick, oder einer umschliessenden Schleife) folgenden Code:
ActuelleZahl = Zahlen.Zaehlen(generator.nextInt(Zahlen.MaxZahl)); for(int i=0; i < Zahlen.ActDurchlauf; i++) { if(ActuelleZahl == Zahlen.UsedZahlen[i]) { i = -1; ActuelleZahl = zahlen.Zaehlen(generator.nextIn(Zahlen.MaxZahl)); } } Zahlen.UsedZahlen[Zahlen.actZahl] = ActuelleZahl; Zahlen.ActDurchlauf++;
Ich hoffe Du kannst damit was anfangen(habs jetzt nicht compiliert, und hoffe ich hab keinen Fehler eingebaut)