如果以前已经问过这个问题,我谨此致歉。
这里有一些代码。
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语句完全相同(减去变量)并且不总是为true,那么第一条if / else语句如何始终为真?
(在此代码之前声明了扫描仪。)
答案 0 :(得分:8)
由于您的id1
和id2
不相等,因此表达式(id != id1 || id != id2)
始终应评估为true。您可能要使用&&
来代替||
。然后您的代码进入第一个循环,导致第二个表达式未求值,因此没有警告。
答案 1 :(得分:2)
IntelliJ之所以没有告诉您有关第二个if
的任何信息,是因为它检测到您永远无法输入第二个while
。
实际上,突破第一个while
的唯一方法是有一个例外,即使这样,您也不会输入第二个while
。
因此,IntelliJ无需检查第二while
内发生的任何事情。
答案 2 :(得分:0)
您的逻辑不正确,if
语句应与两个相等性检查一起 AND :
if (id != id1 && id != id2) {
System.out.println("Employee does not exist. Please try again.");
}
只要输入id
或id1
或id2
,即< / p>
NOT (id = id1 || id = id2)
根据DeMorgan的定律,NOT (p OR q)
变为NOT p AND NOT q
。
编辑:第二个循环永远不会被点击的原因很简单,这是因为第一个循环永远不会退出。但是,重要的是要了解德摩根的定律。这种错误经常在这里出现。
答案 3 :(得分:0)
问题与您使用||
(或)有关。程序逻辑看到的是,“如果id不等于id1的值 OR ,则id不等于id2则该语句为true。”
由于您不能同时拥有两个数字的ID,因此它将始终为true。
-编辑-
您的IDE足够聪明,可以识别此问题,并且将看到您永远无法退出第一个while循环。这意味着您永远不会到达第二个if语句,也永远不会对它产生正面或负面的评价。
要解决此问题,请改用&&运算符查看它们是否不等于任何一个ID。
此外,任何一个ID都可以使用任何一个密码,因为没有任何与ID密码匹配的ID
答案 4 :(得分:0)
因为第一个if始终为true,并且if节中没有中断,而while循环永远不会结束。可能就是第二个不显示警告的原因。
尝试在第一个while部分中注释,然后查看第二个警告是否显示。
另外,在两次while循环之间,您的代码有一个错误,应该使用input.nextLine()
,因为当您输入第一个输入并按Enter时,第一个input.nextLine()
将使用int而不是新行并将其传递给第二个input.nextLine()
。因此,要消费换行符,请在两个input.nextLine()
之间插入nextInt()
答案 5 :(得分:0)
由于使用的是逻辑OR运算符,因此只有一个TRUE值足以执行IF块。您的ID可以是ID1,ID2或其他名称。如果id = id1,则左侧为FALSE,右侧为TRUE。如果id = id2,则左侧为TRUE,右侧为FALSE。如果id是其他东西,则双方都是TRUE。在每种情况下,条件检查最终都为TRUE。因此,IF块始终为TRUE。您必须对其进行如下修改;
if(id == id1 || id == id2){
break;
} else {
System.out.println("Employee does not exist. Please try again.");
}
OR
if(id != id1 && id != id2){
System.out.println("Employee does not exist. Please try again.");
} else {
break;
}
答案 6 :(得分:0)
的确 id!= id1 || id!= id2 永远不会为假,因为id1和id2的值是不同的,并且如果id == id1则id不能等于id2,因此在这种情况下条件将永远为真 如果您修复了该警告,则intellij将在条件条件下的下一个while循环中向您显示警告,并且同样情况也适用于(idPass!= idPass1 || idPass!= idPass2)条件。
答案 7 :(得分:0)
根据您的静态代码,您只能在真值表中包含这种情况,并且将它们解析为true:
x y z | x != y | x != z | v
---------------------------
0 0 1 | 0 | 1 | 1
0 1 0 | 1 | 0 | 1
1 0 1 | 1 | 0 | 1
1 1 0 | 0 | 1 | 1