1

需要对“!=”如何工作的一些解释,我从过去的试卷中得到了这个,理论上( a==b || a==c || b!=c )应该可以工作,但是当你编译它时说“Scalene”而不是“等腰”,直到我将其更改为 (!( a==b || a==c) || b!=c )) 才起作用。

class test {
public static void main(String[] args) {
    int a = 5;
    int b = 5;
    int c = 10;

    if ( a > 0 & b > 0 & c > 0) { 
        if (a==b && b==c) { 
            System.out.println("Equilateral"); 
        } else if ( a==b || a==c || b!=c ) {
            System.out.println("Scalene"); 
        } else if ( a+b>c && a+c>b || b+c>a ) { 
            System.out.println("Isosceles");  
        }
    }
}

}

4

7 回答 7

4

它按预期工作。

如果a=5,也是。b=5_ 在这种情况下,也是。(因为)(a==b)true( a==b || a==c || b!=c )truea==b

于 2013-11-11T12:47:50.677 回答
1

操作员 !反转条件。如果是真的,那就是假的,如果是假的,那就是真的。

于 2013-11-11T12:48:33.657 回答
0

Java 表达式从左到右求值。如果使用比较运算符 OR ( ||),如果某个条件的计算结果为真,则右侧的其余条件将被忽略。这就是为什么

else if ( a==b || a==c || b!=c )

计算结果为真,因为a==b结果为真,因为ab都用 value 初始化5

于 2013-11-11T12:48:32.923 回答
0
( a==b || a==c || b!=c ) 

如果其中一个为真,那么它将进入 if 子句 >

于 2013-11-11T12:48:44.923 回答
0

您问题中的问题与 无关!=,而与||. 当它评估该语句并看到它时a==b,它会说“嗯,那是正确的,所以我完成了”。如果您希望它匹配所有三个,那么您应该使用&&而不是||.

于 2013-11-11T12:49:26.797 回答
0

表达式 (A || B) 的计算如下。

如果 A 为真,则表达式的计算在此停止并返回真,因为 A || 错误或 A || true 在任何情况下都是 true,它不会检查 B 的值。

如果 A 为假,则不会像上述情况那样终止评估,但会检查 B 值。因为假 || 真为真,但为假|| 假的是假的。

正如你所看到的,只有当 A 的值为假时 B 才有意义,否则评估 B 是浪费宝贵的执行时间。这就是算子短路评估的本质!

表达式 ( A && B) 也以类似的方式计算。如果 A 为假,则表达式计算停止并返回假。如果 A 为真,则检查 B 的值。

有关这方面的更多信息,请阅读此链接。

于 2013-11-11T12:54:38.560 回答
0

在评估这个

if ( a==b || a==c || b!=c )

编译器会看到a==b哪个是true,因此不会进一步评估表达式。

如果您希望编译器评估完整的表达式,请使用|而不是||.

无论如何,对于Scalene三角形,您检查站点的不相等性而不是相等性。所以你可以使用:

if ( a!=b && a!=c && b!=c )
于 2013-11-11T12:59:48.007 回答