if (array[i]<(char)65 || array[i]>(char)122 &&
array[i]>(char)91 || array[i]<=(char)96)
System.out.println("False")
在这段代码中,当我尝试将字符“C”(顺便说一句,即 67)分配给 array[i] 时,它仍然显示 false。我做了数学计算,它不应该打印“false”,正如我在这一行下面所说的那样。
(67 < 65 = 0 || 67 > 122 = 0) = 0
(67 > 91 = 0 || 67 <= 96 = 1) = 1
因此,我们得到: 0 & 1 = 0 。 有什么想法吗?
最佳答案
经过一些格式化,您的代码是:
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,您就会打印 False
。67 小于 96,因此您会打印 False
。正如评论中所指出的,运算符具有优先权。与其学习所有细节(以预测这样的情况),不如使用足够的括号更容易。
关于java - 我在这段java代码中缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961254/