Java 简单的逻辑不起作用,还是我遗漏了什么?
我不明白为什么打印出以下类:Java 简单的逻辑不起作用,还是我遗漏了什么?,java,logic,logical-operators,Java,Logic,Logical Operators,我不明白为什么打印出以下类: 正确 假的 我认为输出应该是: 假 假的 因为这行打印错误: System.out.println((11 >= 1 || 11 <= 10) & (true == 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 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;
}
}
公共类TestClass{
公共静态void main(字符串[]args){
System.out.println(1到10(11,false));
System.out.println((11>=1 | | 11=1 | | n要测试值是否在1到10之间吗?
如果是这种情况,则更改(n>=1 | | n=1&&n
因此,这一行还应该打印false:System.out.println(ininto10(11,false));
不,此行不应打印false
。尽管第一个参数11
,确实会将表达式n>=1 | | n=1 | | 11转换为true
。如何处理
if ((n >= 1 || n <= 10) & (outsideMode == false)) {
return true;
}
它将返回false
。如何返回
if ((n >= 1 || n <= 10) & (outsideMode == false)) {
return true;
}
由于11>=1
为true
,因此它不会再次检查11
如果要在数字介于1和10之间(包括1和10)时返回true,则应为:
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;
}
如果((n>=1&&n我认为您在1到10的函数中遗漏了这一点,那么您正在比较(false==false),并且主要是在比较(true==false)。结果也是如此。希望这会有所帮助。让我们在1到10中分解测试:
参数:outsideMode=false;n=11
- (n>=1 | | n(11>=1 | | 11)(真| |假):=>非常正确
- outsideMode==false:=>false==false:=>so-TRUE
最后:
public static boolean in1To10(int n, boolean outsideMode) {
if ((TRUE) & (TRUE)) {
return true;
}
return false;
}
:=>返回TRUE!您的期望值和结果是相同的..它打印TRUE-false
,您期望它打印…TRUE-false
?问题是什么?我回答了我的问题。我的期望值是false如果您想获得匹配的输出,请将TRUE
在10
中传递到()。我知道Java甚至不检查&运算符?它检查。它甚至不检查|
运算符。这是因为您有另一个选择,所以如果至少有一个参数为true,则为true。n>=1为true,因此返回trueimmidiately@D.Ace我编辑了我的答案,这样更容易理解。如果你仍然不理解某些东西,请尝试我给你们的改变,看看它是如何工作的,然后再问我更多的问题。我会尽快回答,我看到,短路操作会立即返回真,第一个条件是真的。我想它只会使第一个方程短路,它是这样的:(n>=1 | | n哪个应该打印false?慢..问题是,(n>=1 | | n=1&&n这是我所认为的@Pirate,但它不是打印false。它是打印true。所以你想从函数返回false吗?将| |更改为函数内部的-,它将返回false。好的,但在解释中提到这一行将是false:“所以条件将变成这样,真与假,那将是假”。这仍然正确吗???在解释中是(真与真),但如果你将| |改为&它将变成(假与真)这将是错误的。不,在Java中,布尔真是true
。而不是true
。在这种情况下,我们谈论的不是确切的Java语法或关键词,而是布尔逻辑。感谢您的回答。我将对其他答案进行投票。
if ((n is greater or equal to 1 AND smaller or equal 10) AND is the mode set to false)
return true
if ((n >= 1 && n <= 10) && (outsideMode == false)) {
return true;
}
public static boolean in1To10(int n, boolean outsideMode) {
if ((TRUE) & (TRUE)) {
return true;
}
return false;
}