为了账号安全,请及时绑定邮箱和手机立即绑定

第一个 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 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信