在Java编程中,我试图通过while循环放置一个int,并且我希望int小于9且大于零。但是当程序运行时,它只记录第一个条件(在这种情况下," num< 1")并忽略第二个条件(" num> 9")。
int num = console.nextInt();
while(num<1 && num>9){
System.out.println("You must type a number less than nine and greater than zero to continue.");
num = console.nextInt();
}
我翻了个订单,同样的问题出现了。为什么程序在while循环中注册第一个条件而不是第二个条件?我从来没有遇到过Strings这个问题,在这种情况下,这些格式是不同的?
答案 0 :(得分:1)
根据我的理解,在大多数编程语言中都是一样的。
原因是a && b
表示如果a
为真并且b
为真,那么只有在所有条件下才会变为真。所以如果&#39; a&#39;事实并非如此,没有必要检查b
是否属实。
这就是为什么大多数编程语言都是这样实现的
无论数据类型如何,所有人都是如此。
答案 1 :(得分:1)
首先AND
表示条件都应该为真。由于您已将&&
条件放在while
中,因此编译器无法获得小于1且小于9的num
。
对于AND
,它总是检查第一个条件;如果它不满意则会变得懒惰,并且不会检查后续条件。
解决方案:
while(num<1 || num>9)
答案 2 :(得分:1)
在您的代码段中,表达式为:
(num < 1 && num > 9)
总是评估为假,一个数字不能同时小于一,也不能大于九。
我想你想要:
(num > 0 && num < 9)
编辑:此外,Helios是正确的。表达式从左到右进行计算,如果不满足第一个条件(左边),则布尔值为AND(&amp;&amp;),第二个条件(右边)永远不会被计算,因为组合表达式可以从来没有评价任何东西,只有虚假。
答案 3 :(得分:0)
作为您的条件,给定数字必须小于1 “和”大于9,这将永远不会成真。
对于您的方案,您需要使用“或”条件
while(num<1 || num>9)
答案 4 :(得分:0)
当您撰写num<1 && num>9
时,这意味着您正在尝试评估该数字是否小于1 AND 大于9 ,但您是否可以真正输入此类数据?号码?
根据您的要求,您应检查提供的号码是否小于1 或大于9 。所以应该是这样的:
while(num<1 || num>9){
逻辑运算符&&
和||
在评估条件时也使用快捷方法。在cond1 && con2
中,如果第一个条件cond1
为false
,则评估第二个条件即cond2
没有意义。同样在cond1 && con2
中,如果cond1
为true
,则cond2
将不会被评估,因为它是多余的。