java第一个if语句始终为true,但第二个if语句不为true
如果以前有人问过我这个问题,我很抱歉
这是我的一些代码
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;
}
}
如你所见。除变量外,两条if/else语句完全相同。在IntelliJ中,ID的第一个语句表示它总是正确的。第二条语句是密码,它没有给我这个警告
如果第二个if/else语句完全相同(减去变量),并且不总是真的,那么第一个if/else语句怎么可能总是真的
(扫描仪在此代码之前声明。)
# 1 楼答案
因为第一个if总是真的,if部分没有中断,而循环永远不会结束。所以这可能就是第二个没有显示警告的原因
试着在第一个while部分添加注释,看看第二个部分是否显示警告
另外,在两个while循环之间,代码中有一个bug,您应该使用
input.nextLine()
,因为当您输入第一个输入并按enter键时,第一个input.nextLine()
将使用int而不是新行,if将被传递到第二个input.nextLine()
。因此,要使用新行,在两个nextInt()
之间有input.nextLine()
# 2 楼答案
逻辑处于关闭状态,
if
语句应该和一起执行两个相等检查:你可以通过重新措辞来说服自己,只要输入的
id
不是id1
或id2
,你就想阻止根据德莫根定律,
NOT (p OR q)
变成了NOT p AND NOT q
编辑:第二个循环从未被击中的原因很简单,因为第一个循环永远无法退出。但重要的是理解德摩根定律。这种错误在这里经常出现
# 3 楼答案
这个问题与
||
(or)的使用有关。程序逻辑看到的是,“如果id不等于id1或的值,则id不等于id2,则此语句为真。”因为你不能让一个ID同时等于这两个数字,所以它的计算结果总是真的
-编辑-
您的IDE足够智能,能够识别这一点,并且将看到您永远无法退出第一个while循环。这意味着你永远不会得到第二个if语句,它也永远不会进行任何正面或负面的评估
要解决此问题,请使用&&;而不是运算符,以查看它们是否不等于两个ID中的任何一个
此外,任何一个ID都可以与任何一个密码一起使用,因为没有任何ID与ID密码匹配
# 4 楼答案
IntelliJ没有告诉您任何关于第二个
if
的信息,是因为它检测到您永远无法进入第二个while
实际上,跳出第一个
while
的唯一方法就是有一个例外,即使这样,你也不会进入第二个while
因此,IntelliJ不需要检查第二个
while
内发生的任何事情# 5 楼答案
由于
id1
和id2
不相等,表达式(id != id1 || id != id2)
应始终计算为true。你可能想用&&
来代替||
。然后你的代码进入第一个循环,导致第二个表达式没有计算,所以没有警告# 6 楼答案
因为您使用的是逻辑OR运算符,所以只有一个真值就足以执行IF块。您的id可以是id1、id2或其他。如果id=id1,左侧为假,右侧为真。如果id=id2,左侧为真,右侧为假。如果id是其他东西,双方都是真的。在每种情况下,条件检查最终都是真的。因此,如果block始终为真。你必须修改它如下
或者