Was ist an der Schleife falsch das sie nicht funktioniert?

...komplette Frage anzeigen

5 Antworten

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 bewerten Vielen Dank für Deine Bewertung

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) {...
Antwort bewerten Vielen Dank für Deine Bewertung
Suboptimierer 08.11.2016, 14:03

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.

0
KnusperPudding 08.11.2016, 14:07
@Suboptimierer

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.

0

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?

Antwort bewerten Vielen Dank für Deine Bewertung

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 bewerten Vielen Dank für Deine Bewertung

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 !=

Antwort bewerten Vielen Dank für Deine Bewertung
Tschoo 08.11.2016, 14:00

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.

0

Was möchtest Du wissen?