(Math.random()*49) zahl darf aber nur einmal gezogen werden

Rouven50

Aktives Mitglied
hey ich steh grad total aufm schlauch… ich weiß einfach nicht wie ich das lösen kann das wenn man zb 6 zufällig erzeugte zahlen zieht, dass die zahl aber nur einmal aufgerufen wird.


als erstes habe ich ein array erzeugt wo die werte drin gespeichert werden
Java:
		int zahl;
		int [] zahlen = new int[6];
		for(int a=0;a<zahlen.length;a++){
			zahl =(int)((Math.random())*6)+1;
			zahlen[a] = zahl;
                        //hier
		}

aber jetzt muss man ja wo "hier" steht wieder eine schleife einbauen die testet ob die zahl bereits vorhanden ist das hab ich mir so gedacht:

Java:
		int zahl;
		int [] zahlen = new int[6];
		for(int a=0;a<zahlen.length;a++){
			zahl =(int)((Math.random())*6)+1;
			zahlen[a] = zahl;
                        for(int b=0;b<a;b++){
                             if(zahlen[b] == zahl){
                                 zahl =(int)((Math.random())*6)+1;
                                 zahlen[b] = zahl;
                             }
                        }
                  IO.print(zahlen[a]);
		}

aber das geht ja auch nicht weil man dann wieder erneut prüfen müsste ob zahlen == zahl und für die bereits geprueften elemente müsste man das auch nochmal machen…

oder man müsste die 2 arrays haben wo man einmal alle erlaubten werte drin speichert und dann noch ein array wo man den zufällig erzeugten array-inhalt übergibt und den dann zb auf 0 setzt und dann sagt das nur werte die nicht 0 sind erlaubt sind…
aber an der umsetzung hapert es noch
 
Die Forensuche hätte dir hier bestimmt weitergeholfen, das wurde schon sehr oft behalndelt:
Java:
	public static void main(String[] args) {
		List<Integer> allNumbers = new LinkedList<Integer>();
		for (int i = 1; i <= 49; i++) {
			allNumbers.add(i);
		}
		
		Collections.shuffle(allNumbers);
		
		List<Integer> numbers = allNumbers.subList(0, 6);
		System.out.println("Gezogene Zahlen: " + numbers);
	}
Oder du nimmst die Variante mit dem Set.
 
Keine Doppelten?

Java:
int[] arr = new int[6];
for (int i = 0; i < arr.length; i++) {
  int z = (int) (Math.random() * 6.0) + 1;
  int j = 0;
  while (j < i) {
    if (arr[j] == z) {
      break;
    }
  }
  if (j == i) {
    arr[i] = z;
  } else {
    i--;
  }
}

oder eine intelligente Datenstruktur wählen.
 
endet bei mir in einer endlosschleife die zufallszahlen 1-6 hab ich nur testweise genommen… soll für eine beliebige zahlengröße gelten
 
Zuletzt bearbeitet:
Etwas vergessen gehabt:

Java:
        int[] arr = new int[6];
        for (int i = 0; i < arr.length; i++) {
            int z = (int) (Math.random() * 6.0) + 1;
            int j = 0;
            for (; j < i; j++) {
                if (arr[j] == z) {
                    break;
                }
            }
            if (j == i) {
                arr[i] = z;
            } else {
                i--;
            }
        }
        System.out.println(Arrays.toString(arr));

Eine Datenstruktur, die keine doppelten Elemente erlaubt, ist wirklich besser - oder eine, wo Kandidaten raus gewählt werden.
 
Manche finden auch das besser (lesbarer):

Java:
        int[] arr = new int[6];
        for (int i = 0; i < arr.length;) {
            int z = (int) (Math.random() * 6.0) + 1;
            boolean b = true;
            for (int j = 0; b && j < i; j++) {
                if (arr[j] == z) {
                    b = false;
                }
            }
            if (b) {
                arr[i] = z;
                i++;
            } else {
                //pause
            }
        }
        System.out.println(Arrays.toString(arr));

Oder nur while-Schleifen etdc.

java.util.Arrays.toString# erstellt einen speziellen String....
 
Zuletzt bearbeitet:
Java:
        List<Integer> list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5, 6});
        Collections.shuffle(list);
        System.out.println(list);

verlier auch solche Möglichkeiten nicht aus den Augen, es kommt darauf an, wie viele Zahlen aus wie vielen Zahlen genommen werden sollen.
 

Zurück
Oben