我不明白为什么以下课程打印出来:
真正
假
我认为输出应该是:
假
假
因为此行打印为false:
System.out.println((11 >= 1 || 11 <= 10) & (true == false));
所以这一行也应该打印false:
System.out.println(in1To10(11, false));
我在这里缺少什么?这是班级。
public class TestClass {
public static void main(String[] args) {
System.out.println(in1To10(11, false));
System.out.println((11 >= 1 || 11 <= 10) & (true == false));
}
public static boolean in1To10(int n, boolean outsideMode) {
if ((n >= 1 || n <= 10) & (outsideMode == false)) {
return true;
}
return false;
}
}
答案 0 :(得分:2)
您想测试值是否在1到10的范围内? 如果是这种情况,将(n> = 1 || n&lt; = 10)改为(n> = 1&amp;&amp; n&lt; = 10)
答案 1 :(得分:2)
( true )
( true ) & ( true )
(true || false ) & ( true ) <--- false == false is true!
if ((n >= 1 || n <= 10) & (outsideMode == false)) {
return true;
}
看,是n >= 1
?是的,所以true
。 true v p <-> true
,所以Java甚至不进一步检查。 true /\ true <-> true
我们输入if
。 return true
;
您的代码是用简单的英语:
if ((n is greater or equal to 1 OR smaller or equal 10) AND is the mode set to false)
return true
如果你希望它返回true,如果数字介于1和10之间,则为:
if ((n is greater or equal to 1 AND smaller or equal 10) AND is the mode set to false)
return true
在Java中是:
if ((n >= 1 && n <= 10) && (outsideMode == false)) {
return true;
}
另外请记住使用&&
和||
,因为它们是逻辑运算符,而不是处理布尔值时的|
和&
位逻辑运算符。
答案 2 :(得分:1)
所以此行也应该打印false:
System.out.println(in1To10(11, false));
不,此行不应打印false
。虽然第一个参数11
确实将表达式n >= 1 || n <= 10
从您的方法转换为11 >= 1 || 11 <= 10
(与您的其他表达式匹配),但第二个参数false
转为{{1}进入outsideMode == false
,而你的另一个表达式有false == false
。
这就是两个输出不同的原因:true == false
的输出为in1To10
,因为比较true
产生false == false
,而true
的输出是错误的,因为main
会产生true == false
。
注意:您的表达式与其确定false
介于n
和1
之间的既定目标不符。您需要将10
替换为||
才能完成此操作。
答案 3 :(得分:1)
我认为你错过了函数in1to10,你正在比较(false == false),而你在比较(true == false)。结果也是如此。希望这会有所帮助。
答案 4 :(得分:-1)
这将返回true
。怎么样?
if ((n >= 1 || n <= 10) & (outsideMode == false)) {
return true;
}
您正在将11
和false
传递给该函数。
当它进入第一个条件时,它将检查n >= 1
是11 >= 1
是true
,因此它不会检查n<=10
。同样,它会检查第二个条件,outsideMode
为false
,
就是这样,(true) & (true)
因此整个条件为true
,函数将为return true
。
再次第二个条件,
(11 >= 1 || 11 <= 10) & (true == false)
它将返回false
。怎么样?
由于11 >= 1
为true
,因此不再检查11 <= 10
,而右侧为false
。
所以条件会变成这样,
true & false
的{{1}}。
答案 5 :(得分:-1)
让我们在in1to10中分解测试:
参数:outsideMode = false; n = 11;
最后:
public static boolean in1To10(int n, boolean outsideMode) {
if ((TRUE) & (TRUE)) {
return true;
}
return false;
}
:=&GT;返回TRUE!