Frage von TheLighttPlay, 19

Was ist an der Schleife falsch das sie nicht funktioniert?

import java.util.Scanner; import java.util.Random; public class Surr {

public static void main(String[] args){
    
    
    Scanner sc = new Scanner(System.in);
    Random r = new Random();
    
    int zufall = r.nextInt(100);
    int i = 0;
    i=i++;
    System.out.println("Zahlenren");
    
    int eingabe = 12;
    
    while(eingabe==zufall){
    
        if(eingabe < zufall){
            System.out.println("Die Zahl ist größer");
            i++;
            
        }else if(eingabe > zufall){
            System.out.println("Die Zahl ist kleiner");
            i++;
        }else{
            System.out.println("Super");
                        break;
        }
    
    }
    
    
}

}
Antwort
von hawking42, 19

Da ich nicht weiß, was genau der Sinn der Schleife ist, bzw. was du mit deinem Programm bezweckst, kann ich nur beschreiben, was ich sehe.

die while-Schleife wird bei dir nur ausgeführt, wenn "eingabe == zufall" ist.

In der Schleife fragst du >, < aber auch == ab. 

Du kommst also nie in den Zustand > oder < innerhalb dre Schleife.

Du hast ausserdem eingabe= 12 gesetzt. In der Schleife ändert sich "eingabe" aber auch "zufall" nicht. Du hast also genau zwei Möglichkeiten. Die Schleife wird NIE ausgeführt oder in einer Endlosschleife.


Antwort
von Suboptimierer, 18

Die Schleife ergibt keinen Sinn. Übersetzt steht da:

"Solange die Eingabe gleich der Zufallszahl ist prüfe, ob die Eingabe kleiner oder größer der Zufallszahl ist."

Er geht immer ins else, wenn er überhaupt erstmal in die Schleife kommt.

PS: i=i++; schreibt man so nicht. i++; reicht. Statt int i = 0; i = i++; kannst du auch schreiben int i = 1; -.-

Da du das i in und nach der Schleife nicht mehr verwendest, kannst du dir in der Schleife i++ sparen, also auch die Deklaration und Initialisierung von i. Wofür brauchst du i?

Expertenantwort
von KnusperPudding, Community-Experte für Java, 18

Das liegt daran, dass deine Schleifenbedingung nur in einem Fall wahr ist:

while (eingabe == zufall) {...

Und zwar wenn die Eingabe, dem Zufallswert entspricht.

Du möchtest es aber eigentlich genau andersrum: Es soll weiter geraten werden, bis die Eingabe der Zufallszahl entspricht. - Daher könnte man hier die Bedingung negieren und:

while (eingabe != zufall) {...

verwenden, aber auch das wäre im konkreten Falle nicht zielführend, da deine Ausgabe, bei erfolgreichem finden ebenfalls in der Schleife enthalten ist.

Entsprechend würde ich vorschlagen, dass du ein eine boolean variable verwendest um die Schleife zu steuern, welche du mit false initialisierst. z.B.:

boolean erraten = false;

sodass deine Schleife so lange läuft, bis der Wert erraten ist:

while (!erraten) {...
Kommentar von Suboptimierer ,

Der Fragesteller darf nicht vergessen, in der Schleife dann bei Fehlversuch eine neue Eingabe einzulesen. Wenn eingabe immer 12 ist, droht die Gefahr einer Endlosschleife.

Kommentar von KnusperPudding ,

Ja, richtig. Der Code sah mir auch noch nicht so ganz fertig aus:

Die Scanner-Variable ist noch komplett unbenutzt. 

Die i-Variable soll wohl zählen, wie viele Fehlversuche es gab. Diese Variable wird auch nirgends ausgegeben.

Antwort
von sirbrighty, 2

Ich würde aus der Bedingung ein

 while(true)

machen, dann wird der code mit Ausgabe "Super" durchlaufen, sollte gleich zu Anfang die Zufallszahl die 12 sein, falls nicht, läuft die Schleife weiter. Beim nächsten Schleifendurchgang muss aber natürlich eine neue Zufallszahl gezogen werden, das soll ja eben so lange dauern bis eben die 12 tatsächlich "gezogen" wird. Deswegen würde ich den code

zufall = r.nextInt(100);

gleich nach dem while(true) innerhalb der Schleife ausführen lassen, d. h. so:

while(true)
{
zufall = r.nextInt(100);

// Rest wie gehabt.

}
Antwort
von Domenic77, 13

Kenne mich mit Java nicht so gut aus aber für mich sieht es so aus als würde der While Loop nur Laufen wenn die Eingabe schon richtig ist und daher sieht der User denn Output der Schleife nicht. Ersetze das == durch !=

Kommentar von Tschoo ,

Das ganze hat ja nur bedingt mit Java zu tun -- wäre diese while-Schleife in C oder C++, würde sie sich genauso verhalten.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten