if (array[i]<(char)65 || array[i]>(char)122 &&
array[i]>(char)91 || array[i]<=(char)96)
System.out.println("False")
在这段代码中,当我尝试将字符'C'(即61 btw)分配给array [i]时,它仍然表示错误。我做了数学计算,不应该打印“假”,因为我在这一行下面说过。
(67 < 65 = 0 || 67 > 122 = 0) = 0
(67 > 91 = 0 || 67 <= 96 = 1) = 1
所以,这离开了我们:0&amp; 1 = 0。 有什么想法吗?
答案 0 :(得分:3)
使用一些格式,您的代码是:
if ( array[i] < (char)65 || array[i] > (char)122 &&
array[i] > (char)91 || array[i] <= (char)96 )
System.out.println("False");
由于&&
的优先级高于||
(请参阅Operators),因此相当于:
if ( array[i] < (char)65
|| ( array[i] > (char)122 && array[i] > (char)91 )
|| array[i] <= (char)96 )
System.out.println("False");
由于&&
短路,因此在行为上等同于:
if ( array[i] < (char)65
|| array[i] > (char)122
|| array[i] <= (char)96 )
System.out.println("False");
,由于最后一个案例涵盖了第一个案例,因此在逻辑上等同于:
if ( array[i] > (char)122 || array[i] <= (char)96 )
System.out.println("False");
只要大于122或小于或等于96. 67的值小于96,您就会打印False
,因此您打印False
。正如评论中指出的那样,运营商有优先权。而不是学习所有细节(预测这样的情况),只需使用足够的括号。
答案 1 :(得分:1)
首先评估&&
,然后根据Java Operator Precedence评估||
。因此,它以'C'
67>122 && 67>91 //false
67<65 || false //false
false || 67<=96 //true
如果你使用括号,它将解决这个问题
if ((array[i]<(char)65 || array[i]>(char)122) &&
(array[i]>(char)91 || array[i]<=(char)96))
答案 2 :(得分:0)
我想您可以使用括号()
尝试此操作:
if ((array[i]<(char)65 || array[i]>(char)122) && (array[i]>(char)91 || array[i]<=(char)96))
System.out.println("False")
另请注意&&
具有更高的优先级