Unendliche While-Schleife in Java
Hey there! Ich bin versucht zu tun, einige Daten, die Validierung von Eingaben, aber ich habe nicht in der Lage, um es herauszufinden. Ich bin immer eine unendliche while-Schleife, wenn ich versuchen, zu überprüfen, ob das erste Zeichen eingegeben haben, ist ein Brief. . . .
Vielen Dank für Ihre Hilfe!
public class methods
{
public static void main(String args[]) throws IOException
{
String input ="";
int qoh=0;
boolean error=true;
Scanner keyboard = new Scanner (System.in);
//while (error)
//{
//error=true;
while (error==true)
{
System.out.print("\nEnter Quantity on Hand: ");
input = keyboard.nextLine();
if (input.length() <1)
{
System.out.println("\n**ERROR06** - Quantity on hand must be between 0 and 500");
error=true;
System.out.println(qoh);
System.out.println(input);
}
else
{
error=false;
}
}
error = true;
while (error==true)
{
if (Character.isLetter(input.charAt(0)))
{
System.out.println("\n**ERROR06** - Quantity on hand must be between 0 and 500");
error=true;
System.out.println(qoh);
System.out.println(input);
}
else
{
qoh = Integer.parseInt(input);
error=false;
}
}
}
}
Randnotiz: while(Fehler == true) kann geschrieben werden als, während(Fehler)
InformationsquelleAutor Andy | 2010-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kein
input = keyboard.nextLine();
in der zweiten while-Schleife.Könnte man umgestalten von code nur Fragen, für neuen input, wenn ein Fehler aufgetreten ist. Also direkt nach der sysout 'FEHLER...'
Extra:
Ich würde tatsächlich tun dies anders. Der "Fehler = true' am Anfang ist ein bisschen verwirrend, weil es vielleicht nicht ein Fehler sein.
Könnten Sie zum Beispiel schreiben Sie eine Methode namens tryProcessLine, die liest die Eingabe und gibt true zurück, wenn ok, und false, wenn ein Fehler aufgetreten ist, und als nur etwas tun, wie
while(!tryProcessLine()){ }
Beispiel unten:
Ich denke, er will sich eine neue Eingabe, wenn der Fehler in der zweiten Schleife passiert. Da sonst die zweite Schleife sollte nicht eine Schleife. Denn jetzt, wenn es ist ein 'Fehler' in der zweiten Schleife, keine neue Eingabe angefordert wird, und "Fehler==true' ist, wird immer wahr sein...
Meine Vermutung ist, dass er Lesen will, die erste nicht-leere Zeile der Eingabe und versuchen Sie zu analysieren, es in eine ganze Zahl. Ich glaube nicht, dass die OP erfordert zwei Schleifen an alle.
Wenn das der Fall ist, wird die zweite while-Schleife soll einfach eine if-Anweisung...
InformationsquelleAutor Fortega
Ist das problem in diesem Abschnitt:
Sobald Sie einen Buchstaben in der ersten position, können Sie diese Schleife nie beendet. Es wird überprüft, ob ein Brief ist in der ersten position (ist), druckt es und wiederholt. Versuchen Sie:
Auch ein paar andere Dinge:
while (error == true)
verkürzt werden kann, umwhile(error)
.Auch
Integer.parseInt
werfen wirdNumberFormatException
wenn die Eingabe ist keine ganze Zahl -, die Sie brauchen, zu fangen und zu behandeln.Außerdem, warum brauchen Sie dann die zweite Schleife überhaupt? Es scheint, wie es ist, sollte nur zur Validierung der input - wenn das so ist, kann man sich diese Logik in die erste Schleife und die Beseitigung der zweiten. Verwenden Sie nur Schleifen, für Dinge die immer wieder auftreten (wie der Benutzer die Eingabe von input-Daten). Es gibt keine Notwendigkeit zu prüfen, der gleiche input wiederholt.
InformationsquelleAutor danben
Die Endlosschleife tritt auf, weil die zweite while-Schleife ist wiederholte überprüfung, ob das erste Zeichen in der Zeichenfolge (
input.charAt(0)
) ist ein Brief. Unter der Annahme, dass das Ergebnis von dieser Prüfung wahr ist, wird die Schleife nie beendet.Der code kann vereinfacht werden zu etwas wie:
InformationsquelleAutor Adamski
Wenn es ist ein Zeichen, ermöglichen Sie Fehler immer noch = true, was verursacht, dass die Schleife immer weiter, Sie sind nicht immer gehen zurück an den Anfang und Lesen Sie eine weitere Linie.
Hier ist etwas code, der das tut, was Sie wollen, und gliedert sich ein wenig besser.
"quit" != Linie sein sollte !"quit".equals(line)
Ich parse die ganze Zahl doppelt, weil ich faul bin und gekapselte es falsch. Fortega: Ihre Veränderung.
InformationsquelleAutor Kylar