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.
Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab?
Ich erstelle Zahlen von 1-25 zufällig her und lasse die dann in einem Array Speichern.
Wie schaffe ich jetzt, das die zahlen NICHT doppelt vorkommen und sich dann auf eine andere Zahl verändern, die es noch nicht gibt.
Bitte ich brauche ein Quelltext bespiel ich krieg das nicht hin und bin schon 3 stunden am suchen und rumprobieren.
[CODE lang="java" title="Zufallszahlen werden im Array gespeichert"]speicher = new int[11];
for(int i=0;i<11;i++)
speicher = (int)(Math.random()*25)+1;[/CODE]
Also bei sowas hilft aus meiner Sicht immer:
a) Genau überlegen, wie das läuft. Dazu einfach überlegen, wie es mit Stift und Papier gehen würde.
b) Unterteile das komplexe Problem in viele kleine Probleme, die einfach zu lösen sind.
Bezüglich a) müsstest Du Dir halt überlegen, wie Du vorgehen willst, wenn Du einen Würfel mit 25 Seiten hast und du 11 Unterschiedliche Würfe aufschreiben sollst.
Wenn ich ein Array hab und da 25 Nummern reinschreibe also von 1-25. Wie kann ich das Array dann durchwürfeln, so das ich 11 verschiedene Zahlen habe ?
Wenn ich ein Array hab und da 25 Nummern reinschreibe also von 1-25. Wie kann ich das Array dann durchwürfeln, so das ich 11 verschiedene Zahlen habe ?
Da kommt ggf. eine andere Herangehensweise zum tragen. Das wäre dann ähnlich wie Lotto-Spielen: Du hast eine Menge von Kugeln (Array mit den Zahlen von 1 bis 25) und du ziehst eine. Dann entfällt diese Kugel und du ziehst bei den verbleibenden Kugeln die nächste ... das dann 11 mal ...
Aber das ist nicht das vorgehen, das ich in #1 gesehen habe, denn da hattest Du nur ein Array mit den Zielen und kein Array mit den möglichen Werten ...
Eine "zu-Fuss-Methode" wäre, das bisher befüllte Array (intern) der Grösse nach zu sortieren, dessen aktuelle Länge zu ermitteln, und in einer Schleife (+ Algorithmus) zu kontrollieren, ob ein neu einzutragender Zufallswert schon im Array vorkommt. Das dauert mit steigender Arraygrösse immer weiter an und selbst mit dem Würfel mit 25 Seiten kann man Werte öfter würfeln als zu erwarten wäre... Schneller geht es mit einer Suchmaschine @ "java random array no duplicates", z.B.: https://www.tutorialspoint.com/java-program-to-generate-random-numbers-with-no-duplicates
Also ein Array zu sortieren ist nicht einmal notwendig.
Es ist ja kein Problem, da entsprechend vorzugehen:
So lange man nicht die gewünschte Anzahl an Werten hat:
- würfelt man eine Zahl.
- man geht alle bereits notierten Zahlen durch und prüft, ob die neu gewürfelte dabei war. Ist das nicht der Fall, dann notiert man die Zahl.
Die Problematik, dass man ggf. lange würfeln muss, kann man umgehen:
a) ich mache ein Array mit der Anzahl der möglichen Zahlen und schreibe dann in jedes Feld eine Zahl. Dann mische ich die Werte (hier kann man sich frei überlegen, wie man das machen könnte) und nehme einfach die ersten x Zahlen.
b) ich mache erneut ein Array wie zuvor. Dann würfel ich mir die x Zahlen, indem ich für jedes x:
1. Eine Zufallszahl von 0...n-x Würfel.
2. Den Inhalt von dem Feld mit Index der Gewürfelten Zahl mit dem Feld mit Index n-x tauschen
Am Ende habe ich die x Zufallszahlen am Ende des Arrays.
Das wären dann 3 mögliche Vorgehen in knappen Worten erläutert. Die erste Methode scheint mir relativ einfach umzusetzen sein...
Eine Schleife wird solange durchlaufen bis 25 unterschiedliche zahlen enstehen. darin enhalten eine schleife die erst hochzählt( wenn eine neue Zahl enstanden ist) die die position des arrays bestimmt wo der nächste Array hingesezt wird und sonst nicht. Darin enthalten eine schleife die die erzeugte zahl mit den Anzahl der schon besetzten positionen des Arrays vergleicht um festzustellen ob diese zahl vorhanden ist solange bis eine neue zahl entstanden ist und einträgt sonst nicht und die entstandene zahl löscht und eine neue Zahl in auftrag gibt.
Wobei ich b) jetzt als eine Form des Mischens sehen würde, bei der man sich auf x Zahlen beschränkt. Dass die Zahlen am Ende stehen, kann man leicht ändern, indem man die Zufallszahl aus dem Intervall [i,n[ wählt und mit i tauscht.
Wobei ich b) jetzt als eine Form des Mischens sehen würde, bei der man sich auf x Zahlen beschränkt. Dass die Zahlen am Ende stehen, kann man leicht ändern, indem man die Zufallszahl aus dem Intervall [i,n[ wählt und mit i tauscht.
Ja, das ist richtig, streng genommen ist es nur eine spezielle Form des Mischens und die beschriebene Technik ist eine Möglichkeit, wie man ein Mischen implementieren könnte ...