2016-05-11 11 views
-1

In Java-Programmierung, ich versuche, ein int durch eine while-Schleife setzen, und ich möchte die Int weniger als neun und größer als null sein. Aber wenn das Programm läuft, registriert es nur die erste Bedingung (in diesem Fall "num < 1") und ignoriert die zweite ("num> 9").Java - While-Schleife Bedingte Anweisung Fehler mit int Werte

int num = console.nextInt(); 
while(num<1 && num>9){ 
    System.out.println("You must type a number less than nine and greater than zero to continue."); 
    num = console.nextInt(); 
} 

Ich habe ihre Bestellung umgedreht, und das gleiche Problem taucht auf. Warum registriert das Programm die erste Bedingung in der while-Schleife, aber nicht die zweite? Ich hatte dieses Problem nie mit Strings, sind Ints in dieser Situation anders formatiert?

+0

Zuerst, warum, warum überprüfen Sie, ob num> 9 AND num <1? Das ist unmöglich und wird niemals den Code erreichen. Um zu prüfen, ob eine der Bedingungen zutrifft, verwenden Sie || wie in einem OR-Operator – Li357

Antwort

0

als Ihre Bedingung eine bestimmte Anzahl muss weniger als 1 "und" größer als 9, die nie wahr sein wird.

Für Ihr Szenario müssen Sie

eine „oder“ Zustand verwenden

while(num<1 || num>9)

1


Ab meinem Verständnis ist es gleiche in den meisten der Programmiersprachen. bedeutet a && b bedeutet, wenn a ist wahr und b ist wahr dann nur über alle Bedingung wird wahr.So wenn 'a' ist nicht wahr dann gibt es keinen Punkt der Überprüfung, ob b wahr ist oder nicht.
Deshalb wurden die meisten Programmiersprachen so implementiert.
Das Gleiche gilt für alle unabhängig vom Datentyp.

+0

Nicht ganz; die Nummer wird nur einmal eingegeben; sagen wir, in diesem Fall gebe ich "0" ein. Es wird durch die While-Schleife gehen, ich ändere es, um "4" zu sagen, es geht weiter zum nächsten Ding. Wenn ich das erste Mal "9" eintippe, wird die While-Schleife komplett ignoriert und es sollte durch die While-Schleife gehen, die das erste Mal mit 9 oder höher läuft. Wenn ich das erste Mal 9 gebe, erfüllt das nicht die erste Bedingung von "num <1", so dass die Bedingung nicht erfüllt ist, aber das Programm es trotzdem überspringt. – Ray25Lee

1

Zunächst einmal AND bedeutet, dass sowohl die Bedingung sollte wahr sein. Wie Sie && Zustand im Innern while gesetzt haben wurde es unmöglich für den Compiler ein num zu erhalten, die weniger als 1 sowie größer als 9

Für AND es immer die erste Bedingung überprüft ist; Wenn es nicht zufrieden ist, wird es faul und prüft nicht auf nachfolgende Bedingungen.

Lösung:

while(num<1 || num>9) 
+0

Aah, ich sehe, was du und der erste Kommentator gesagt haben. Ich nehme an, das ist nur für Ints, weil ich Strings vorher noch nie so etwas erlebt habe. Wie umformatiere ich es, um beide Bedingungen zu registrieren? Das "||" wird nicht funktionieren, oder? Denn wenn ich irgendeine Zahl eintippe, wird sie akzeptiert, weil irgendeine Zahl mindestens eine dieser Aussagen erfüllt. – Ray25Lee

+0

Das hängt davon ab, wie Sie Ihren Zustand ausdrücken. Sie können einfach sagen: "num" sollte größer als 0 sein UND kleiner als 9 "" oder "" sollte nicht kleiner als 0 ODER größer als 9 "sein. Conditionals verhält sich unter allen Datentypen immer konsistent. – Helios

1

In Ihrem Code-Snippet gibt den Ausdruck:

(num < 1 && num > 9) 

immer falsch auswertet, kann eine Zahl nicht gleichzeitig weniger als ein und auch größer als neun.

Ich glaube, Sie wollen:

(num > 0 && num < 9) 

EDIT: Auch Helios korrekt ist. Ausdrücke werden von links nach rechts ausgewertet und im Falle eines booleschen AND (& &) wenn die erste Bedingung (auf der linken Seite) nicht erfüllt ist, wird die zweite Bedingung (auf der rechten Seite) niemals ausgewertet, da der kombinierte Ausdruck niemals ausgewertet werden kann zu allem außer falsch.

0

Wenn Sie num<1 && num>9 schreiben es bedeutet, dass Sie, wenn die Zahl zu bewerten versuchen, ist weniger als 1 UND größer als 9, aber können Sie wirklich eine solche Nummer eingegeben?

Entsprechend Ihrer Anforderung, sollten Sie prüfen, ob bereitgestellt Nummer weniger als 1 OR größer als 9. So soll es sein wie:

while(num<1 || num>9){ 

Logische Operatoren, && und ||, auch Verknüpfung Ansatz verwenden, während Bedingung auswertet. Wenn in cond1 && con2 die erste Bedingung cond1false ist, dann hat es keinen Sinn, die zweite Bedingung zu bewerten, dh cond2. Wenn in cond1 && con2cond1true ist, wird cond2 nicht ausgewertet, da es redundant ist.