這個問題在這里已經有了答案: 為什么一個變數對多個值的不等式檢查總是回傳真? (3 個回答) 4 小時前關閉。
我正在嘗試獲取用戶輸入并檢查它是“1”還是“2”,如果不是則顯示錯誤訊息。即使輸入正確,我也會不斷收到錯誤訊息。
Scanner user_input = new Scanner(System.in);
String choice = "";
// Input Validation
do {
// Read user choice
choice = user_input.nextLine();
if (!choice.equals("1") || !choice.equals("2"))
System.out.println("Invalid input. Give new value");
}while (!choice.equals("1") || !choice.equals("2"));```
uj5u.com熱心網友回復:
你的條件不正確。如果需要同時消除 1 和 2,請使用邏輯 AND。我認為您想實作這一點
do {
choice = user_input.nextLine();
if (!choice.equals("1") && !choice.equals("2"))
System.out.println("Invalid input. Give new value");
} while (!choice.equals("1") && !choice.equals("2"));
此外,為了消除冗余并提高代碼的可讀性,請考慮將驗證邏輯移除到單獨的方法中。
public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);
String choice = "";
do {
choice = user_input.nextLine();
if (isValid(choice))
System.out.println("Invalid input. Give new value");
} while (isValid(choice));
System.out.println("Your input is valid: " choice);
}
private static boolean isValid(String choice) {
return !choice.equals("1") && !choice.equals("2");
}
uj5u.com熱心網友回復:
條件存在邏輯錯誤。應該有“&&”而不是“||”。
感謝@tgdavies。
像這樣...
String choice = "";
// Input Validation
do {
// Read user choice
choice = user_input.nextLine();
if (!choice.equals("1") && !choice.equals("2"))
System.out.println("Invalid input. Give new value");
}while (!choice.equals("1") && !choice.equals("2"));
uj5u.com熱心網友回復:
if (!choice.equals("1") || !choice.equals("2")) 沒有意義
我的頭腦很簡單,所以我總是喜歡做一些簡單的檢查,例如......
System.out.println(!true || !false); // !"1".equals("1") || !"1".equals("2")
System.out.println(!false || !true); // !"2".equals("1") || !"2".equals("2")
System.out.println(!false || !false); // !"3".equals("1") || !"3".equals("2")
哪個列印
true // Show error message ... this is wrong, `1` is valid
true // Show error message ... this is wrong, `2` is valid
true // Show error message ... this is correct
這很明顯是錯誤的,第一條陳述句,我們當 not 1or時2,列印錯誤資訊
所以,相反,我們應該反轉 兩邊的結果||,例如...
System.out.println(!(true || false)); // !("1".equals("1") || "1".equals("2"))
System.out.println(!(false || true)); // !("2".equals("1") || "2".equals("2"))
System.out.println(!(false || false)); // !("3".equals("1") || "3".equals("2"))
哪個列印...
false // Don't show error message ... `1` is valid
false // Don't show error message ... `2` is valid
true // Show error message ... `3` is invalid
好吧,這似乎更好
我還會一路簡化退出條件......
Scanner user_input = new Scanner(System.in);
String choice = "";
boolean isValidChoice = false;
// Input Validation
do {
// Read user choice
choice = user_input.nextLine();
if (!(choice.equals("1") || choice.equals("2"))) {
System.out.println("Invalid input. Give new value");
} else {
isValidChoice = true;
}
} while (!isValidChoice);
System.out.println("Good choice!");
uj5u.com熱心網友回復:
如果輸入有效,您可以在回圈中間轉義。
public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);
String choice = "";
// Input Validation
while (true) {
// Read user choice
choice = user_input.nextLine();
if (choice.equals("1") || choice.equals("2"))
break;
System.out.println("Invalid input. Give new value");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/412570.html
標籤:
