亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

第一個 if 語句總是正確的,但第二個不是

第一個 if 語句總是正確的,但第二個不是

慕無忌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個贊

由于您的id1id2不相等,因此表達式的計算結果(id != id1 || id != id2)應始終為真。您可能想用&&替換||. 然后您的代碼落在第一個循環中,導致未評估第二個表達式,因此沒有警告。


查看完整回答
反對 回復 2021-08-04
?
達令說

TA貢獻1821條經驗 獲得超6個贊

IntelliJ 之所以沒有告訴您有關第二個的任何信息,if是因為它檢測到您永遠無法進入第二個while。

確實,突破第一個的唯一方法while就是有一個例外,即使這樣,你也不會進入第二個while

因此,IntelliJ 無需檢查第二個內部發生的任何事情while


查看完整回答
反對 回復 2021-08-04
?
有只小跳蛙

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。


編輯:第二個循環永遠不會被命中的原因是微不足道的,因為第一個循環永遠不會退出。但這里重要的是理解德摩根定律。這種類型的錯誤在這里經常出現。


查看完整回答
反對 回復 2021-08-04
  • 3 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號