2017-02-22 8 views
-1

Ich arbeite an einem Code, der die Benutzereingaben und Schleifen mit einer while-Anweisung ausführt, wenn die Eingabe nicht das ist, wonach das Programm sucht.
Aus irgendeinem Grund wird die while-Anweisung immer ausgeführt, auch wenn die Bedingungen nicht erfüllt sind.
Ich habe versucht, die Bedingungen zu beheben, aber ich bin mir nicht sicher, was los ist.Do While Loop-Überspringungsbedingung

do { 
    System.out.println("Enter a height within 0 and 23"); 
    height = s.nextInt(); 
} while (height < 0 || height > 23);{ 
    System.out.println("Please enter an integer within 0 and 23"); 
    height = s.nextInt(); 
} 

Jede Hilfe wird sehr geschätzt!

+2

Der Code ungültig wäre, wenn das Semikolon entfernt wurden - Das 'while' geht mit der vorhergehenden 'do'-Schleife, nicht mit dem folgenden Block. –

+0

Um dem vorherigen Kommentar hinzuzufügen, sind die zweiten geschweiften Klammern nicht Teil dieses Codeausschnitts. – SteveFerg

Antwort

0

denke ich, eine Standard-while-Schleife Sie besser

int height = 0; 
while (True) { 
    System.out.println("Enter a height within 0 and 23"); 
    height = s.nextInt(); 
    if (height < 0 || height > 23) { 
     System.out.println("Please enter an integer within 0 and 23"); 
     continue; 
    } else break; 
} 

Grundsätzlich passen würde, das "Code-Block" ist nicht auf die while-Anweisung eines angewendet do-while

{ 
    System.out.println("Please enter an integer within 0 and 23"); 
    height = s.nextInt(); 
} 
+0

Ah, das hilft ich werde mit diesem Dank gehen –

+0

Froh, es zu hören. Du kannst deinen Dank sagen, indem du die Antwort akzeptierst (// stackoverflow.com/help/someone-answers). –

1

Sie haben zu viel Code. Alles was Sie brauchen ist:

do { 
    System.out.println("Enter a height within 0 and 23"); 
    height = s.nextInt(); 
} while (height < 0 || height > 23); 

A do ... while Schleife die while am Ende hat, nicht der Anfang.

+0

Ich glaube, Sie haben die Eingabeaufforderung "Please enter" verpasst. –

+0

Diese Antwort ist korrekt, könnte aber möglicherweise weitere Erklärungen dazu liefern, warum. Die do while-Schleife führt den Code zwischen dem ersten {} -Paar mindestens einmal und mehrmals aus, wenn die Bedingung wahr ist, was nach der Ausführung des Codeblocks ausgewertet wird. Der zweite Codeblock nach dem while befindet sich also nur in einem eigenen Codeblock, der nichts mit Schleifen zu tun hat und daher unnötig ist. – Encaitar

0

Sie haben eine do-Schleife UND eine while-Schleife gemischt zusammen. befreie das "do {" und das 1. "}". Mach auch was Shmosel sagte und entferne das ";". Dies ermöglicht es Ihnen, das erste int außerhalb der while-Schleife zu erhalten. Wenn es sich innerhalb Ihrer Bedingung befindet, beginnt es mit dem Schleifen.

System.out.println("Enter a height within 0 and 23"); 
    height = s.nextInt(); 
    // now have 1st condition for the whie loop 
    while (height < 0 || height > 23) { 
    System.out.println("Please enter an integer within 0 and 23"); 
    height = s.nextInt(); 
    } 
0

Wie in der Frage erwähnt, wird die while-Anweisung immer noch ausgeführt wird, wenn die Bedingungen nicht sind met.However dies nicht wahr ist.

Die while-Schleife für die Eingänge nicht ausgeführt wurden, wenn Höhe zwischen 0 und 23 (einschließlich) Eingänge: 0 < = Höhe < = 23.