java - 我在这段java代码中缺少什么?

标签 java if-statement comparison

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/

相关文章:

Java HttpURLConnection 没有 cookies

ios - 如何使用枚举而不是三种不同的状态?

Java 字符串检查

Javascript 数组 - 检查两个对象数组的相同内容,忽略顺序

java - 如何比较 java swing 按钮图标以检查相等性?

java - 如何使用http响应参数测试mvc Controller 方法?

java - Tomcat 8.0 64 位服务器无法启动并从 Catalina.bat 中获取错误

Java Swing 将 JTextField 值移动到第二个按钮

javascript - 如果 a 或 b = null 或无值,则...填写最后一个字段会覆盖函数吗?

c# - isprefix 是否比在 C# 中比较两个字符串更昂贵?