Random() gleiche Zahlen ausschließen

bad_killa

Mitglied
hallo,
hab ein kleines problem und zwar möchte ich zufallszahlen in ein array schreiben.
die zahlen sollen zwischen 0-9 sein und dürfen nicht zweimal vorkommen.

Java:
(int)(Math.random() * 10);

bringt mir ja die zufalls zahlen aber wie schließe ich aus das es zweimal oder dreimal die gleiche zahl vorkommt?
 
wie oft willst du den das random ausführen?

ich weis nicht ob es eine Möglichkeit gibt Zahlen auszuschließen.
Ich würde es so machen, das du nach dem Erhalt der Zahl durch das Random einfach vergleichst, ob die Zahl in deinem Array vorhanden ist, wenn ja dann mache weiter : else schreibe in array.

Ist zwar Holzhammer aber egal ^^
 
Indem zu entweder jedesmal über das Array iterierst und schaust, ob die Zahl schon vorhanden ist, oder indem du die Zahlen erst in eine Collection schreibst und jedesmal schaust, ob die Collection deine gewünschte größe hat. sobald sie die gewünschte größe hat, schreibst du die collection in das array um.
 
das soll der anwender entscheiden können so 3-10 mal also ich möchte damit realisieren das er sich somit aussucht ob er von 10 möglichen fragen 3 bearbeiten möchte oder mehr. damit die frage nicht 2 mal kommt oder dreimal möchte ich es somit ausschließen.
 
Dann würde ich an deiner Stelle das ganze über ne Collection/Set lösen.
Da kommen nur unterschiedliche zahlen drin vor und über die Mächtigkeit kannst du die maximale Anzahl regeln.

zB das HashSet

lg
 
hab ein kleines problem und zwar möchte ich zufallszahlen in ein array schreiben.
die zahlen sollen zwischen 0-9 sein und dürfen nicht zweimal vorkommen.
in diesem fall würde ich eine liste von 0-9 machen, mit Collectsions.shuffle mischen und dann einfach mit remove(0) ziehen...
 
die lösung wäre perfekt aber leider soll ich nur dinge benutzen die wir im unterricht gelernt haben und das ist noch nicht über die anfänge hinweg. sprich die ganzen schleifen, abfragen und so kleine dinge.
 
wie oft willst du den das random ausführen?

ich weis nicht ob es eine Möglichkeit gibt Zahlen auszuschließen.
Ich würde es so machen, das du nach dem Erhalt der Zahl durch das Random einfach vergleichst, ob die Zahl in deinem Array vorhanden ist, wenn ja dann mache weiter : else schreibe in array.

Ist zwar Holzhammer aber egal ^^

Dann nimm meinen Ersten Vorschlag. Alles mit einfachen Anweisungen und Schleifen zu realisieren.
Die Ausgabe regelst du über Anzahl der Nutzereingabe


Fertig.
 
mit boolean array?
Java:
Random random = new Random();
boolean[] used = new boolean[9];
int rdm = random.nextInt (10); //0 -9
used[rdm] = true;
 
habe nun das array befüllt, kann mir nun einer eine unterstützung sagen wie ich prüf das da keine gleichen zahlen drin stehen.

Java:
int auswahl[];
String abfrage;
int anzahl;
      
abfrage = JOptionPane.showInputDialog("Wieviele Fragen möchten Sie beantworten (3-10)?");
anzahl = Integer.parseInt(abfrage);
    
auswahl = new int[anzahl];
    
for(int i=0; i<=(anzahl-1); i++)  //Befüllen des Arrays
{
auswahl[i] = (int)(Math.random() * 10);

wäre für hilfe dankbar bin da noch nicht so gut 😉
 
Naja du musst vor dem füllen nochmal das Array bis zur aktuellen stufe durchlaufen und gucken ob bei den vorherigen einträgen dein aktueller dabei ist.
 
Der Müde Joe hat doch eine gute und schnelle lösung vorgeschlagen
ein zweites boolean array erzeugen und eine zahl used true setzen wenn man sie hat. vorm reinschreiben in das ergebnis array überprüfen ob die zahl noch false ist
 
Ich glaube man sollte ein LinkedHashSet benutzen ca. so:
Java:
int nBenoetigteZahlen = 5;
LinkedHashSet<Integer> erhalteneZahlen = new LinkedHashSet<Integer>();
while(erhalteneZahlen.size() != nBenoetigteZahlen) {
    erhalteneZahlen.add((int)(Math.random() * 10));
}
 
@ Naaram wie gesagt kann nur des einsetzen was im unterricht schon behandelt wurde.
@der müde joe könntest du mir deine idee etwas näher erklären komme nicht ganz dahinter wie das funktioniert
 
Angenommen du hast das Array von boolean;

1. du genierst eine Randomzahl
2. wenn im array der boolen noch nicht gesetzt ist, boolean setzen und gefundene Zahl zurückgeben
3. wenn im array der boolean gesetzt ist goto 1

Aber pass auf - wenn schon alle Zahlen gezogen sind, hängt das - den Fall musst du noch abfangen

--

Was war der Unterschied zwischen Kopfträger und Kopfnutzer schon wieder ? Aua :autsch:
 
Java:
    public static void main(String args[]) {
        int max = 10;

        String abfrage = JOptionPane.showInputDialog("Wieviele Fragen möchten Sie beantworten (3-" + max + ")?");
        int sollAnzahl = Integer.parseInt(abfrage);
        int istAnzahl = 0;

        if (sollAnzahl > max) sollAnzahl = max;
        if (sollAnzahl < 3) sollAnzahl = 3;

        int[] auswahl = new int[sollAnzahl];
        boolean[] used = new boolean[max];

        System.out.print("schleifenzahlen: ");

        while (istAnzahl < sollAnzahl) {
            int temp = (int)(Math.random() * max);
            System.out.print(temp);

            if (! used[temp]) {
                auswahl[istAnzahl] = temp;
                used[temp] = true;
                istAnzahl++;
            }
        }

        System.out.println();
        System.out.println("auswahl:" + Arrays.toString(auswahl));
    }
 
mit max=20 und sollAnzahl = 20 kommt bei mir

Code:
schleifenzahlen: 51641391913101821601371651711114715941019171711181541618410451717101314016176161645121561416113610207101711181712351314151771008
auswahl:[5, 16, 4, 13, 9, 19, 10, 18, 2, 0, 7, 17, 1, 11, 15, 6, 12, 14, 3, 8]


du hast irgendwas falsch übertragen von meinem beispiel
 
Zuletzt bearbeitet von einem Moderator:
weil heute so ein schöner tag ist...

Java:
import java.util.Arrays;

import javax.swing.JOptionPane;

public class RandomTest {

   public static void main(String[] args) {
      int auswahl[];
      String abfrage;
      int anzahl;

      abfrage = JOptionPane.showInputDialog("Wieviele Fragen möchten Sie beantworten (3-10)?");
      anzahl = Integer.parseInt(abfrage);

      auswahl = new int[anzahl];

      for (int i = 0; i <= (anzahl - 1); i++) // Befüllen des Arrays
      {
         int wert = 0;
         do {
            wert = (int) (Math.random() * 10) + 1;
         } while (contains(auswahl, wert));
         auswahl[i] = wert;
      }

      System.out.println(Arrays.toString(auswahl));
   }

   public static boolean contains(int[] arr, int wert) {
      for (int w : arr) {
         if (w == wert)
            return true;
      }
      return false;
   }
}


nur zur info: das sind leichte anfänger beispiele um die grundlagen zu lernen. Falls diese Aufgabe in der Schule gekommen ist, ist es ok. Falls du aber studierst wirs schwierig werden...

ach ja, wer weiß was passiert wenn man 11 eingibt bekommt 100 punkte ;-)
 
[c]wert = (int) (Math.random() * 10) + 1;[/c] -> [c]wert = (int) (Math.random() * anzahl) + 1;[/c] 😉
Aber eigentlich ist dieses Problem viel einfacher lösbar: Erstelle eine Liste mit Inhalt [c]1 - anzahl[/c] und lass [c]Collections.shuffle()[/c] drüber laufen.
 

Neue Themen


Zurück
Oben