Endlosschleife

zopffa

Mitglied
Hallo,
mein Algorithmus soll eine Zahl einlesen und einer Variablen zuordnen. Falls die Eingabe ungültig ist soll die Abfrage erneut beginnen. Ich möchte dass mit einer while-Schleife realisieren aber immer bei einer falschen Eingabe komme ich auf eine Endlosschleife und verstehe nicht warum.

Hier das code Fragment:

Java:
while (read == false){
	Out.print("Geben sie eine Zahl ein: ");
	zahl = In.readInt();
	read = In.done();
	}
}

Vielen Dank im vornherein!!

lg
leo
 
aso das hab ich jetzt vergessen zu erwähnen: In.done() ist eine boolean variable die anzeigt ob der vorherige lesevorgang erfolgreich war.
 
aso das hab ich jetzt vergessen zu erwähnen: In.done() ist eine boolean variable die anzeigt ob der vorherige lesevorgang erfolgreich war.

Dann lass dir den Wert doch einfach mal ausgeben. Anscheinend ist er ja auch nach der Eingabe weiterhin auf "false" gesetzt.

Um den Fehler beheben zu können, wirst du uns wohl auch noch den Rest deines Quellcodes zeigen müssen.
 
und was passiert denn bei deiner Endlosschleife?
läuft das Programm von selber, kann man währenddessen nichts eingeben,
erscheinen die Ausgaben ständig hintereinander ohne das auf Eingabe gewartet wird?
oder kann man normal weiter eingeben aber selbst bei korrekter Zahl erfolgt kein Abbruch?

wie soll irgendjemand was dazu sagen? niemand weiß doch was In.readInt() macht, nach welchen Bedingungen In.done() true oder false zurück gibt usw.

du postest Code
unbekannterBefehl1();
unbekannterBefehl2();
und fragst warum das nicht geht..
 
So, hier mal die Erkärung zu den Befehlen:



Java:
/** Read an integer.
This method skips white space and tries to read an integer. If the
text does not contain an integer or if the number is too big, the
value 0 is returned and the subsequent call of done() yields false.
An integer is a sequence of digits, possibly preceded by '-'.
*/
public static int readInt() {
  String s = readDigits();
  try {
    done = true;
    return Integer.parseInt(s);
  } catch (Exception e) {
    done = false; return 0;
  }
}

Java:
/** Check if the previous operation was successful.
This method returns true if the previous read operation was able
to read a token of the requested structure. It can also be called
after open() and close() to check if these operations were successful.
If done() is called before any other operation it yields true.
*/
public static boolean done() {
  return done;
}

static { // initializer
  done = true;
  in = System.in;
  buf = empty;
  inputStack = new LinkedList();
  bufferStack = new LinkedList();
  LS = System.getProperty("line.separator").toCharArray();
  if (LS == null || LS.length == 0) {
    LS = new char[] { '\n' };
  }
}

}

und zur zweiten Frage. Wenn die Zahl stimmt funktioniert der Algorithmus aber bei einer Fehleingabe erscheinen die Ausgaben ständig hintereinander ohne das auf Eingabe gewartet wird. Er sollte aber einfach wieder von vorne anfangen.
 
es ist nicht alles zu erkennen, readDigits() fehlt als nächstes,
weiterhin kann im Grunde niemand erraten warum readInt() nichts macht,

das ist doch verständlich oder? warum sollte jemand wissen wo der Fehler liegt,
nur dein Aufruf in der Schleife ist doch keine wirklich plausible Ursache

eine Ahnung kann man immerhin dennoch haben:
bei der Java-Klasse Scanner ist es so, dass ein fehlerhaft eingelesener int im Input stecken bleibt,
dieselben Zeichen das nächste Mal wieder gelesen werden,
erst durch irgendeinen clear()-Aufruf kann was neues versucht werden,

mag sein dass das bei dir auch so ist, dann wäre deine Frage ja doch etwas erfolgreich 😉

zwar sehe ich nicht wirklich, wie das im Code bei erfolgreichen Lesen gehandhabt wird,
andererseits sehe ich das im Scanner-Code gerade auch nicht wirklich..,
und kann bei dir auch in readDigits() stehen
 

Zurück
Oben