有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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语句怎么可能总是真的

(扫描仪在此代码之前声明。)


共 (6) 个答案

  1. # 1 楼答案

    因为第一个if总是真的,if部分没有中断,而循环永远不会结束。所以这可能就是第二个没有显示警告的原因

    试着在第一个while部分添加注释,看看第二个部分是否显示警告

    另外,在两个while循环之间,代码中有一个bug,您应该使用input.nextLine(),因为当您输入第一个输入并按enter键时,第一个input.nextLine()将使用int而不是新行,if将被传递到第二个input.nextLine()。因此,要使用新行,在两个nextInt()之间有input.nextLine()

  2. # 2 楼答案

    逻辑处于关闭状态,if语句应该一起执行两个相等检查:

    if (id != id1 && id != id2) {
        System.out.println("Employee does not exist. Please try again.");
    }
    

    你可以通过重新措辞来说服自己,只要输入的id不是id1id2,你就想阻止

    NOT (id = id1 || id = id2)
    

    根据德莫根定律,NOT (p OR q)变成了NOT p AND NOT q

    编辑:第二个循环从未被击中的原因很简单,因为第一个循环永远无法退出。但重要的是理解德摩根定律。这种错误在这里经常出现

  3. # 3 楼答案

    这个问题与||(or)的使用有关。程序逻辑看到的是,“如果id不等于id1的值,则id不等于id2,则此语句为真。”

    因为你不能让一个ID同时等于这两个数字,所以它的计算结果总是真的

    -编辑-

    您的IDE足够智能,能够识别这一点,并且将看到您永远无法退出第一个while循环。这意味着你永远不会得到第二个if语句,它也永远不会进行任何正面或负面的评估

    要解决此问题,请使用&&;而不是运算符,以查看它们是否不等于两个ID中的任何一个

    此外,任何一个ID都可以与任何一个密码一起使用,因为没有任何ID与ID密码匹配

  4. # 4 楼答案

    IntelliJ没有告诉您任何关于第二个if的信息,是因为它检测到您永远无法进入第二个while

    实际上,跳出第一个while的唯一方法就是有一个例外,即使这样,你也不会进入第二个while

    因此,IntelliJ不需要检查第二个while内发生的任何事情

  5. # 5 楼答案

    由于id1id2不相等,表达式(id != id1 || id != id2)应始终计算为true。你可能想用&&来代替||。然后你的代码进入第一个循环,导致第二个表达式没有计算,所以没有警告

  6. # 6 楼答案

    因为您使用的是逻辑OR运算符,所以只有一个真值就足以执行IF块。您的id可以是id1、id2或其他。如果id=id1,左侧为假,右侧为真。如果id=id2,左侧为真,右侧为假。如果id是其他东西,双方都是真的。在每种情况下,条件检查最终都是真的。因此,如果block始终为真。你必须修改它如下

    if(id == id1 || id == id2){
        break;
    } else {
        System.out.println("Employee does not exist. Please try again.");        
    }
    

    或者

    if(id != id1 && id != id2){
        System.out.println("Employee does not exist. Please try again.");
    } else {
        break;
    }