Java 中的逻辑 OR 显示意外结果



这是我的代码:

Scanner s = new Scanner(System.in);
int t = s.nextInt();
String [] pair_left = new String[t];
String [] pair_right = new String[t];
for (int i = 0; i < t; i++) {
    pair_left[i] = s.next();
    pair_right[i] = s.next();
}
HashSet hs1=new HashSet();
HashSet hs2=new HashSet();
int j=0;
for(int i=0;i<t;i++){
    if(hs1.add(pair_left[i])||hs2.add(pair_right[i])){
      j++;
      System.out.println(j);
    }
    else {      
       System.out.println(j);
    }
}

输入为:

5
john tom
john mary
john tom
mary anna
mary anna

现在,当i=2然后hs1.add(pair_left[i])返回 false,然后它转到也返回"false"hs2.add(pair_right[i])所以hs1.add(pair_left[i])||hs2.add(pair_right[i])应该返回"false",但在我的情况下它显示true.为什么?

当我用按位 OR 替换逻辑 OR 时,它会显示正确的结果。如果有更好的方法可以做到这一点,那么也给它。

您应该知道||逻辑 OR 是短路的,因此如果hs1.add(pair_left[i])返回 true,则不会计算hs2.add(pair_right[i])

另一方面,正如您所注意到的,当您使用 | 时,它是非短路逻辑 OR(请注意,|不仅是按位 OR(,两个操作数总是被计算。

相关内容

  • 没有找到相关文章

最新更新