Er meckert das er nicht mit random und int arbeiten kann. Wie kriege ich es hin ?
Zufall.java:12: error: bad operand types for binary operator '<'
if (wert < zufallszahl)
^
first type: int
second type: Random
Zufall.java:16: error: bad operand types for binary operator '>'
else if(wert > zufallszahl)
^
first type: int
second type: Random
3 errors
Java:
importjava.util.Random;importjava.util.Scanner;publicclassZufall{publicstaticvoid main (String[] args){Scanner neuer_scan=newScanner(System.in);System.out.println("Bitte gib eine Zahl zwischen 1 und 10 ein");int eingabe;
eingabe=neuer_scan.nextInt();Random zufallszahl=newRandom();int wert=zufallszahl.ints(1,0,10).forEach(System.out::println);if(wert < zufallszahl){System.out.println("Die Zahl ist zu klein");}elseif(wert > zufallszahl){System.out.println("Die Zahl ist zu groß");}else{System.out.println("Ja, Richtig");}}}
Die erste Zeile erzeugt ein Objekt vom Typ Random - keine Zahl. Besserer Name währe daher zufallszahlenGenerator.
Die nächste Zeile ist kompletter Unfug. Sie erzeugt vom Zufallszahlen generator einen Stream mit einer Zahl im Bereich von 0 bis 9 und gibt diese Zahl auf der Konsole auf. Eine Rückgabe gibt es nicht, daher kompiliert die Zeile nicht.
Die letzte Zeile vergleicht einen int mit einem Objekt - das kann nciht glauben.
Die Eingabe wiederrum, die aus dem Scanner ausgelesen wird, wird gar nicht verwendet.
Was du vermutlich willst ist eine Zufallszahl im Bereich 0 bis 9:
Java:
Random zufallszahlenGenerator =newRandom();int zufallszahl =Random.nextInt(10);
Und dann diese Zufallszahl vermutlich mit der Eingabe vergleichen.
ok, danke erstmal. Jetzt meckert er anders:
Zufall.java:13: error: non-static method nextInt(int) cannot be referenced from a static context
int zufallszahl=Random.nextInt(10);
^
1 error
Um eine nicht statische Methode aufzurufen braucht man eine Instanz. Die ist da ja schon erzeugt worden. Nur wenn man Code direkt im Forum schreibt, dann wird leicht etwas falsches kopiert. So Fehler solltest Du aber langsam durchaus selbst erkennen - du bist ja schon paar Tage länger an Java dran.
Java:
Random zufallszahlenGenerator =newRandom();int zufallszahl = zufallszahlenGenerator.nextInt(10);
nextInt wird auf der Instanz aufgerufen, die Du in der Zeile davor erstellt hast.
Ich dachte wenn ich die while Schleife einfüge wird solange gefragt bis die Eingabe ok ist. Und bei einer Zahl von 0-10 sollte das ja maximal 11 mal geschehen. Aber anscheinend hab ich da noch nen Denkfehler drin ...
Java:
while(eingabe != zufallszahl){if(eingabe < zufallszahl){System.out.println("Die Zahl ist zu klein");}elseif(eingabe > zufallszahl){System.out.println("Die Zahl ist zu groß");}else{System.out.println("Ja, Richtig");}
Wann erfolgt denn in dieser Schleife die neue Eingabe? Im geposteten Code jedenfalls gar nicht.
ps: Wenn mindestens einmal und gegebenenfalls öfter was gemacht werden soll, bietet sich "do-while" anstatt "while" an.
Bei "while" kann es passieren, dass die Schleife niemals betreten wird, wenn die Bedingung von Anfang an falsch ist.
Auch das ist nicht notwendigerweise so. Wenn du elf Mal eine Zufallszahl von 0-10 ziehst, dann bekommst du nicht eine Permutation aller Zahlen von 0-10.
Genauso wie beim Lotto 6aus49 innerhalb von 49 Ziehungen ja nicht alle 49 Zahlen als erste Zahl einmal gezogen werden.
java.util.Random ist nur asymptotisch gleichverteilt. Es kann durchaus sein, dass du bei 11 Ziehungen von random.nextInt(10) drei oder viermal dieselbe Zahl bekommst.
Auch das ist nicht notwendigerweise so. Wenn du elf Mal eine Zufallszahl von 0-10 ziehst, dann bekommst du nicht eine Permutation aller Zahlen von 0-10.
Genauso wie beim Lotto 6aus49 innerhalb von 49 Ziehungen ja nicht alle 49 Zahlen als erste Zahl einmal gezogen werden.
java.util.Random ist nur asymptotisch gleichverteilt. Es kann durchaus sein, dass du bei 11 Ziehungen von random.nextInt(10) drei oder viermal dieselbe Zahl bekommst.
Wann erfolgt denn in dieser Schleife die neue Eingabe? Im geposteten Code jedenfalls gar nicht.
ps: Wenn mindestens einmal und gegebenenfalls öfter was gemacht werden soll, bietet sich "do-while" anstatt "while" an.
Bei "while" kann es passieren, dass die Schleife niemals betreten wird, wenn die Bedingung von Anfang an falsch ist.
Gut, dank dir. Ich habe nochmal nachgedacht und den Code überarbeitet. Jetzt funzt es
Java:
importjava.util.Random;importjava.util.Scanner;publicclassZufall{publicstaticvoid main (String[] args){Scanner neuer_scan=newScanner(System.in);Random zufallszahlengenerator=newRandom();int zufallszahl=zufallszahlengenerator.nextInt(10);System.out.println("Bitte gib eine Zahl zwischen 1 und 10 ein");int eingabe;
eingabe=neuer_scan.nextInt();while(eingabe != zufallszahl){System.out.println("Bitte gib eine Zahl zwischen 1 und 10 ein");
eingabe=neuer_scan.nextInt();if(eingabe < zufallszahl){System.out.println("Die Zahl ist zu klein");}elseif(eingabe > zufallszahl){System.out.println("Die Zahl ist zu groß");}else{System.out.println("Ja, Richtig");}}}}
So wär's mit do-while, da hast du eine Eingabeaufforderung weniger im Code:
Java:
int eingabe;do{System.out.println("Bitte gib eine Zahl zwischen 1 und 10 ein");
eingabe=neuer_scan.nextInt();>if(eingabe < zufallszahl){System.out.println("Die Zahl ist zu klein");}elseif(eingabe > zufallszahl){System.out.println("Die Zahl ist zu groß");}else{System.out.println("Ja, Richtig");}}while(eingabe != zufallszahl);
Alternativ könntest du in deinem Code anstatt der ersten Eingabe einfach einen ungültigen Wert zuweisen, wie etwa -999
... und falls dich die Eingabe hinterher überhaupt nicht mehr interessiert, kann man's auch komplett ohne zweite Prüfung machen, bzw. mit einer Endlosschleife, die man bei Erfolg abbricht.
Java:
do{System.out.println("Bitte gib eine Zahl zwischen 1 und 10 ein");int eingabe=neuer_scan.nextInt();if(eingabe < zufallszahl){System.out.println("Die Zahl ist zu klein");}elseif(eingabe > zufallszahl){System.out.println("Die Zahl ist zu groß");}else{System.out.println("Ja, Richtig");break;//raus aus der Schleife}}while(true);//Jede Art von Endlosschleife funktioniert hier, entweder "while (true){...}" oder "do{...}while(true);" oder auch "for(;;) {...}"
Warum ich das erwähne: Geh mal deinen Code durch. Annahme: Zufallszahl == 4, die erste Eingabe ist ebenfalls 4: Was wird alles auf den Bildschirm ausgegeben? Falls du nicht drauf kommst, weis die Werte einfach mal fix zu, sieh was passiert.