Wie kann ich einen Zufallsgenerator mit Java erstellen, der 4 unterschiedliche Zahlen anzeigt, die in dem Intervall 0-6 liegen?

3 Antworten

Zu deinem Code:

Die erste Zeile der Methode verstehe ich erst einmal nicht:

int zufallsZahlen = new zufallsZahlen(min, max, zahlenFolge);

Du kannst kein Objekt in einen primitiven Datentyp packen.

Deine derzeitige Schleife wird im Übrigen unendlich lange laufen, denn die Iterationsvariable ändert sich nie, so wird die Bedingung, weiter zu laufen, für die Schleife immer wahr bleiben.

Und zu diesem Befehl:

System.console().print(zufallsZahlen);

Verwende stattdessen den Standard-Ausgabekanal, ist eh viel kürzer:

System.out.print(zufallsZahlen);

Am Ende sollte deine Methode ein Array zurückgeben.

Zur Vorgehensweise:

Alles was du tun musst, ist, eine Schleife n-mal laufen zu lassen und pro Iteration eine Zufallszahl zu generieren, die du in ein Array packst:

public static int[] getRandomNumbers(int count, int max, int min){
   int[] result = new int[count];

for (int i = 0; i < result.length; ++i) { result[i] = (int)(min + Math.random() * (max - min + 1)); }
return result; }

Die Berechnung würde bei diesem Aufruf:

getRandomNumbers(4, 7, 1);

die Zahlen dieser Menge {1, 2, 3, 4, 5, 6} zurückgeben.

SelliWayne 
Fragesteller
 11.11.2017, 23:24

Danke für deine Antwort!

0
regex9  11.11.2017, 23:28
@SelliWayne

procoder42 hat eine wichtige Anforderung angemerkt, die der obige Algorithmus noch nicht erfüllt. Demnach musst du ihn noch etwas umändern. Lass einfach eine weitere Schleife solange laufen und weitere Zufallszahlen erzeugen, bis eine Zahl generiert wird, die noch nicht in der Liste ist.

0
SelliWayne 
Fragesteller
 11.11.2017, 23:41

Noch eine kurze Frage: Mir wird danach folgender Fehler angezeigt:

java:156: error: invalid method declaration; return type required
public static getZufallsCode(int minWert, int maxWert, int codeLaenge) {

Warum und wie bekomme ich den weg?

0
regex9  11.11.2017, 23:44
@SelliWayne

Schau dir den Fehlertext an und vergleiche mit meinem Code: Der Rückgabetyp für die Methode fehlt. Entweder es wird kein Wert zurückgegeben (void) oder wie bei mir doch. Im letzteren Fall ist der return-Befehl mit folgendem Argument entsprechenden Typs Pflicht für jedes Ende möglicher Programmflüsse der Methode.

1

Hier mal ein Ansatz. Den kannst du dann entsprechend um deinen Code erweitern :


public static int[] randomNumberArray(int min, int max, int size){
int[] numbers = new int[size];

for(int i=0; i< size; ++i){
numbers[i] = (int) (Math.random()*(max+1-min))+min;
}

return numbers;
}

Meinst du in deiner Frage. 4 komplett unterschiedliche Zahlen oder bloß nicht 4 mal die selbe ? In dem Fall müsstest du eine entsprechende Überprüfung machen, ob eine Zahl schon "gezogen" wurde.

SelliWayne 
Fragesteller
 11.11.2017, 23:24

ja ich meine 4 komplett unterschiedliche Zahlen zwischen 0 und 6. Danke für deine Antwort!

0
SelliWayne 
Fragesteller
 11.11.2017, 23:44

Noch eine kurze Frage: Mir wird danach folgender Fehler angezeigt:

java:156: error: invalid method declaration; return type required
public static getZufallsCode(int minWert, int maxWert, int codeLaenge) {

Warum wird der angezeigt ? und wie bekomme ich den weg?

0

Ich würde es anders als die anderen beiden Antwortenden hier lösen, betrachte die Sache mal umgekehrt. Denk mal offline. ;) Angenommen, du möchtest Skatkarten mischen. Du hast den Stapel vor dir liegen. Pulst du dir dann aus zufälligen Positionen Karten raus, oder bringst du den ganzen Stapel in eine zufällige Reihenfolge und nimmst dann die ersten x Karten von oben? Wahrscheinlich eher letzteres. ;)

Meine Idee wäre also, dass du am Anfang ein Array hast:

[0,1,2,3,4,5,6]

dieses Array bringst du in eine zufällige Reihenfolge, also so, dass da etwa

[2,5,0,6,1,3,4]

rauspurzelt. Und davon nimmst du dann die ersten vier Zahlen, also in dem Fall [2,5,0,6]. Das sind deine Zufallszahlen, die sind garantiert unterschiedlich.

Das ganze Prinzip nennt sich "shuffling" bzw. "shuffling-Algorithmus". Code-Beispiele für das Durchmischen findest du z.B. hier in den obersten Antworten https://stackoverflow.com/questions/1519736/random-shuffling-of-an-array

Welche Variante dir besser gefällt bzw. welche du besser verstehst, musst du entscheiden.

TeeTier  12.11.2017, 17:13

Der bisher vernünftigste Ansatz! :)

Wobei hier eine ähnliche Frage gefühlt jede Woche zwei mal gestellt wird, wahlweise vor allem auch auch für Pyhon, C++ und PHP. :)

0