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

时间:2013-11-13 18:11:28

标签: 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'(即61 btw)分配给array [i]时,它仍然表示错误。我做了数学计算,不应该打印“假”,因为我在这一行下面说过。

(67 < 65 = 0 || 67 > 122 = 0) = 0

(67 > 91 = 0 || 67 <= 96 = 1) = 1

所以,这离开了我们:0&amp; 1 = 0。 有什么想法吗?

3 个答案:

答案 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")

另请注意&&具有更高的优先级