猿问

第一个 if 语句总是正确的,但第二个不是

如果之前有人问过这个问题,我很谦虚地道歉。


这是我拥有的一些代码。


    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 语句如何始终为真?


(扫描器是在此代码之前声明的。)


慕无忌1623718
浏览 180回答 3
3回答

猛跑小猪

由于您的id1和id2不相等,因此表达式的计算结果(id != id1 || id != id2)应始终为真。您可能想用&&替换||. 然后您的代码落在第一个循环中,导致未评估第二个表达式,因此没有警告。

达令说

IntelliJ 之所以没有告诉您有关第二个的任何信息,if是因为它检测到您永远无法进入第二个while。确实,突破第一个的唯一方法while就是有一个例外,即使这样,你也不会进入第二个while。因此,IntelliJ 无需检查第二个内部发生的任何事情while。

有只小跳蛙

您的逻辑已关闭,并且该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。编辑:第二个循环永远不会被命中的原因是微不足道的,因为第一个循环永远不会退出。但这里重要的是理解德摩根定律。这种类型的错误在这里经常出现。
随时随地看视频慕课网APP

相关分类

Java
我要回答