我正在做这个在线练习,一个问题是:
我们会说一个号码是"青少年"如果它在13..19范围内 包括的。给定2个int值,如果一个或另一个,则返回true 青少年,但不是两个
所以我应该返回true,如果它传递给我的方法的一个int值在13和19的范围内,但如果两者都在范围内则返回false;这是我写的代码:
public boolean loneTeen(int a, int b) {
if ( a >= 13 && a <= 19 || b >= 13 && b <= 19 )
return true;
else
return false;
}
基本上如果整数a介于13和19之间,或者整数b介于13和19之间,则返回true,否则返回false。当我测试它时它起作用,除非我传入13和13表示整数a和b,我得到的是真而不是假。我的问题是我已经查询了有条件的&#34; OR(||)&#34;运营商,它说:
所以当我使用&#34;或&#34;像我上面的代码那样的运算符并不意味着如果a在范围内返回true或者如果b在范围内返回true但是如果两者都在范围内返回false?使用
之间的差异是什么?if ( a >= 13 && a <= 19 || b >= 13 && b <= 19 )
和if ( a >= 13 && a <= 19 && b >= 13 && b <= 19 )
如果传入的两个值都在范围内,为什么它不返回false?答案 0 :(得分:9)
基本上你想要的只是值isTeen(a)
和isTeen(b)
中只有一个是真的,所以使用XOR:
if ((a >= 13 && a <= 19) ^ (b >= 13 && b <= 19))
如果您将^
替换为||
,则允许 a
和b
成为青少年号码。
如果您将^
替换为&&
,则基本上是说您始终希望a
和b
都是青少年数字。
这些都不是你想要的。另一方面,XOR可以完美地解决您的问题。
答案 1 :(得分:1)
问题在于缺乏支撑。
理想情况下,你会写这样的东西:
public boolean isPersonTeen(int a) {
if ( a >= 13 && a <= 19)
return true;
// If you came here means the condition failed.
return false;
}
现在你可以检查XOR
isPersonTeen(a) ^ isPersonTeen(b)
H个!
答案 2 :(得分:0)
||如果至少有一个部分为真,则(或)运算符返回true。现在如果两个部分都是真的,那么至少其中一个部分是真的吗?答案是肯定的。这就是为什么当第一部分被评估为真时,没有必要检查另一部分。
您要寻找的是独家或(^)。如果只有一个部分为真,则此运算符将返回true。因此,要获得所需的结果,您需要做的就是替换||对于^,像这样:
public boolean loneTeen(int a, int b) {
if ( (a >= 13 && a <= 19) ^ (b >= 13 && b <= 19) )
return true;
else
return false;
}
编辑:与David Wallace讨论后添加的if语句中的括号。