这是我的代码:
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(,两个操作数总是被计算。