慕無忌1623718
2021-08-04 17:42:50
如果之前有人問過這個問題,我很謙虛地道歉。這是我擁有的一些代碼。 int id1 = 1234; int id2 = 5678; int idPass1 = 123; int idPass2 = 456; System.out.println("Welcome. Please enter your Employee ID."); while(true) { int id = input.nextInt(); //add more if needed if(id != id1 || id != id2){ System.out.println("Employee does not exist. Please try again."); } else { break; } } System.out.println("Please enter your password."); while(true){ int idPass = input.nextInt(); //add more if needed if(idPass != idPass1 || idPass != idPass2){ System.out.println("Incorrect Password entered. Please try again."); } else { break; } }如你看到的。除了變量之外,2 個 if/else 語句完全相同。IntelliJ 中帶有 ID 的第一個語句表示它總是正確的。帶有密碼的第二個語句沒有給我那個警告。如果第二個 if/else 語句完全相同(減去變量)并且不總是正確的,那么第一個 if/else 語句如何始終為真?(掃描器是在此代碼之前聲明的。)
3 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
由于您的id1
和id2
不相等,因此表達式的計算結果(id != id1 || id != id2)
應始終為真。您可能想用&&
替換||
. 然后您的代碼落在第一個循環中,導致未評估第二個表達式,因此沒有警告。

達令說
TA貢獻1821條經驗 獲得超6個贊
IntelliJ 之所以沒有告訴您有關第二個的任何信息,if
是因為它檢測到您永遠無法進入第二個while
。
確實,突破第一個的唯一方法while
就是有一個例外,即使這樣,你也不會進入第二個while
。
因此,IntelliJ 無需檢查第二個內部發生的任何事情while
。

有只小跳蛙
TA貢獻1824條經驗 獲得超8個贊
您的邏輯已關閉,并且該if語句應該將兩個相等性檢查AND放在一起:
if (id != id1 && id != id2) {
System.out.println("Employee does not exist. Please try again.");
}
您可以通過改寫,你要這么長時間來塊作為說服自己的這個id輸入的不是要么id1或者id2,即
NOT (id = id1 || id = id2)
根據德摩根定律,NOT (p OR q)變為NOT p AND NOT q。
編輯:第二個循環永遠不會被命中的原因是微不足道的,因為第一個循環永遠不會退出。但這里重要的是理解德摩根定律。這種類型的錯誤在這里經常出現。
添加回答
舉報
0/150
提交
取消