Java Zufallszahl erraten?

3 Antworten

Bin zwar lange aus der OOP raus, doch probiere ein Array oder Stack aus

(...) Jedoch weiß ich nicht wie man beliebig viele Eingaben (wegen der Spieleranzahl) miteinander vergleicht (...)

Schleifen sind für so etwas sehr nützlich. Es gibt verschiedene Schleifen, wie die for-Schleife und die while-Schleife. Alle Schleifen haben gemeinsam, dass sie so lange etwas machen, bis eine Bedingung erfüllt ist. In deinem Fall wird eine Benutzereingabe so lange abgefragt, bis der Spieler die Zufallszahl herausgefunden hat.

wie man beliebig viele Eingaben (wegen der Spieleranzahl) miteinander vergleicht

Eine Menge von Werten kann man sich über Container merken. Arrays sind dabei eine der einfachsten Container und Listen eine flexiblere Variante.

Du könntest beispielsweise einen Array anlegen, der so viele Elemente aufnehmen kann, wie es Spieler gibt. In einer Schleife fragst du dann für jeden Spieler eine Zahl ab und wenn du damit fertig bist, prüfst du in einer neuen Schleife und vergleichst die Werte der einzelnen Spieler miteinander.

Gegebenenfalls kannst du dir das aber auch sparen und die Eingaben der Spieler direkt mit der Zufallszahl vergleichen. Hängt von deiner konkreten Aufgabenstellung ab.

Deine Aufgabenstellung ist übrigens ähnlich zu einem Spiel namens Mastermind, siehe beispielsweise https://de.wikipedia.org/wiki/Mastermind_(Spiel)


Mxrt68 
Beitragsersteller
 06.11.2019, 14:14

Vielen Dank für deine Antwort. Jedoch ist meine Aufgabenstellung so, dass jeder Spieler nur ein Versuch hat und derjenige gewinnt, der der Zufallszahl am nächsten ist. Das mit dem Array hab ich verstanden. Ich habe in meinem Programm zunächst ein Array mit der Größe der eingegebenen Spielerzahl deklariert. Danach habe ich eine for Schleife erstellt, in der die alle Spieler nacheinander die Zahl eingeben. Im Anschluss wird die Differenz zwischen der Zufallszahl und den eingegebenen Zahlen berechnet. Diese Differenz speichere Ich anschließend in dem Array ab. jedoch kann ich nun nicht zuordnen, welcher Spieler in dem Array welche Zahl eingegeben hat. Ich bräuchte dringend ein Beispiel.

Hier ein Ausschnitt von meinem Code:

System.out.println("Wie viele Spieler nehmen teil?");
int eingabe = 0;
eingabe = input.nextInt();
int [] array = new int [eingabe];

int i;
for (i=0; i< array.length; i++) {
    System.out.println("Spieler "+(i+1)+" ist dran. Bitte geben Sie ihre Zahl ein!");
    eingabe1 = input.nextInt();
    int diff = methode(eingabe1, zufallsZahl); // Berechnung der Differenz zwischen Zufallszahl und eingegebener Zahl)
    array [i] = diff;
  }
0
Crysali  06.11.2019, 14:25
@Mxrt68

Überleg mal, was in deiner Schleife "i" ist. Das ist dein Index, den du benutzt, um auf ein Element in dem Array zuzugreifen, siehe "array [i] = diff".

Wenn also Spieler (i+1) am Zug ist, dann speicherst du in array[i] die Nähe zu deiner Zufallszahl. Merkst du was? Wenn du für Spieler X wissen möchtest, was seine Nähe zu der Zufallszahl ist, dann kannst du das im array mit array[X - 1] abfragen.

Da ein Array nullbasiert ist, auf das erste Element wird mit dem Index 0 zugegriffen, mach deine Spieler am besten auch nullbasiert. Wenn du zwei Spieler hast, gibt es Spieler 0 und Spieler 1, beispielsweise.

Nun ist dein Problem aber, dass du in dem Array zwar die niedrigste Zahl findest, aber den Index verlierst? Schau mal hier:

int min = Integer.MAX_VALUE;
int index = -1;
for(int i = 0; i < array.length; i++){
    if(array[i] < min){ min = array[i]; index = i; }
}
System.out.println("Gewonnen hat Spieler "+(index+1)+".");
1
Mxrt68 
Beitragsersteller
 06.11.2019, 14:42
@Crysali

@Crysali VIEEELEN Dank. Ich hab zwar nicht ganz funktioniert was index = i macht, jedoch klappt es jetzt.

0
BlazedTowel  06.11.2019, 14:51
@Mxrt68

Index wird mit i belegt, dass man im Nachhinein sagen kann, wer gewonnen hat.

1

Du kannst eine Liste oder array erzeugen mit verschiedenen Spieler objekten, und diese iterativ durchlaufen. Du speicherst dabei delta abstandbeiderzahlen, und guckst ob diese sich verringert. wenn ja, wird diese variablr überschrieben


Mxrt68 
Beitragsersteller
 06.11.2019, 13:26

Wie guck ich ob die Zahl sich verringert? Also ich habe wie auf den Bildern zu sehen ist die Differenz zwischen den eingegebenen Zahlen und der Zufallszahl in der Liste gespeichert. Kannst du bitte erklären oder zeigen was du mit dem überschreiben meinst?

0