Java Zufallsgenerator mit 3 unterschiedlichen Zahlen?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich habe sowas Ähnliches mal bei einem Lotterie-Programm verwendet, bei welchem ja auch keine Zahlen doppelt vorkommen dürfen. Du könntest dir zunächst mal ein Array erstellen.

int[] numbers = new int[3];

Anschließend kannst du die Zahlen mit einer for-Schleife in diesem Array speichern.

for(int i = 0; i < numbers.length; i++) {
  numbers[i] = random.nextInt(10) + 1;
}

Danach gehst du mit einer weiteren for-Schleife die Zahlen durch und überprüfst, ob die Zahlen identisch sind. Wenn ja, dann gehst du einfach einen Schritt in der for-Schleife zurück und generierst dir damit eine neue Zahl.

for(int i = 0; i < numbers.length; i++) {
  numbers[i] = random.nextInt(10) + 1;
  for(int j = 0; j < i; j++) {
    if(numbers[i] == numbers[j]) {
      i--;
    }
  }
}

Du solltest dich aber vorher schon mit solchen Sachen wie if-Abfragen, Arrays und Schleifen befasst haben, bevor du sowas verwendest.

Woher ich das weiß:Hobby

ReitendeLeiche  17.09.2020, 19:28

Das sollte eigentlich die Antwort auf die vorherige Nachricht sein und keine eigene neue Antwort xD

0
alfredo153  22.09.2020, 15:56

Das ist zu Übungszwecken sicher ein schöner Ansatz. In einem realistischen Programm (na gut, soweit diese Anforderung realistisch ist) kann man sich dafür recht elegant ein Set zunutze machen. Etwa so:

var rand = new Random();
var ints = new HashSet<>();
while(ints.size() < 3) {
    ints.add(rand.nextInt());
}

Für das Problem "Lottozahlen" bietet sich hingegen eher an, ein Array aus (z.B.) den Zahlen 1-49 zu verwürfeln und die ersten 6 zu nehmen.

0

Erstelle dir einfach eine Variable "random" in deiner Klasse.

Random random = new Random();

Anschließend benutzt du diese Variable immer dann, wenn du eine neue Zahl brauchst.

int randomNumber1 = random.nextInt(10) + 1;

int randomNumber2 = random.nextInt(10) + 1;

int randomNumber3 = random.nextInt(10) + 1;

Je nach Anwendungsbereich kannst du das eventuell auch schöner schreiben, aber in der Regel sollte das schon seinen Job erfüllen.

nextInt("int") generiert dir eine zufällige Zahl aus dem Bereich "int", also in deinem Fall 10. Da der Randomizer aber bei 0 anfängt und dementsprechend nur bis 9 läuft, du aber einen Wert zwischen 1 und 10 haben willst, musst du eben noch 1 addieren.

Allerdings kann es in diesem Falle dazu kommen, dass zwei Integer zufällig den gleichen Wert bekommen. Wenn du wirklich 3 unterschiedliche Zahlen haben möchtest, könntest du eventuell eine if-Abfrage mit einbauen, die abfrägt, ob der Zahlenwert bereits mit einem der vorherigen Werte identisch ist, und wenn ja, einen neuen generieren.

Woher ich das weiß:Hobby

bayern123508 
Fragesteller
 17.09.2020, 19:03

Wie lautet ein Befehl der mir in diesem Fall eine neue Zahl generiert?

0

Du hast den Sinn des Random-Objektes nicht verstanden.

Du erzeugst eines, und aus dem holst du dann mehrere Zahlen. Wie die Doku sagt:

An instance of this class is used to generate a stream of pseudorandom numbers.

Du kannst das gleiche random-Objekt mehrmals nutzen und musst es nicht immer neu erstellen ...

wie man in Java drei unterschiedliche Zahlen mit dem Befehl new Random generieren kann

und warum das, das macht so keinen Sinn?

Du könntest eine eigene Klasse erstellen, die von Random erbt, und bei Instanziierung im Konstruktor automatisch eine Zahl erstellt .. Sinn ergibt das jedoch nicht