为什么这个条件总是返回false?

时间:2013-05-15 09:09:46

标签: java if-statement

有谁能告诉我以下代码有什么问题。它没有显示任何结果。

整数a,b,c是直角三角形的一侧。(正在解决Project Euler问题39)

如果我使用||取代&& ,它显示基于||的期望结果条件。但不适用于&&条件

public static void main(String[] args)  {
    int a,b,c;
    for (a=1;a<120;a++){
        for(b=120;b>0;b--){
            c= 120-(a+b);
            if (((c) > (a+b)) && ((c*c)==(a*a)+(b*b))){
                    System.out.println(a + " , " + b +" , " + c);
                    System.out.println("**************");

                }
            }   
        }
    }

5 个答案:

答案 0 :(得分:4)

很简单,这是因为这个表达式:

((c) > (a+b))
对于任何有效的直角三角形,

...永远不会在您的示例中返回true,并且因为&amp;&amp; condition要求两个操作数计算为true,if语句不执行。

如果你输入以下几行,你可以清楚地看到这一点:

System.out.println("C: " + c);
System.out.println("A+B: " + a+b);

答案 1 :(得分:1)

第二部分&amp;&amp;如果第一个是真的,条件总是假的。如果c> (a + b)然后c * c> (a + b)*(a + b)=&gt; c ^ 2&gt; a ^ 2 + b ^ 2 + 2ab然后c ^ 2!= a ^ 2 + b ^ 2

答案 2 :(得分:0)

不是+ b总是121?使c始终为-1,使c> a + b不合逻辑的比较?你想在这里做什么?

无论如何,在每个之后添加一些System.out {让你知道发生了什么。 还要添加System.out.println(c +“”+ a +“”+ b +“”+(a + b)+“”+(c * c)+“”+((a * a)+(b * b)));查看比较中的所有参数,以确保在 if 之前得到您期望的结果。

答案 3 :(得分:0)

数学上这两种情况都不会是真的,这就是为什么&amp;&amp;结果为false和||在某种情况下,其中一个条件是正确的。

(c > (a+b)) && (c*c==(a*a)+(b*b))

如果一个数字大于两个数字的总和,则数字的平方也将大于两个数字的平方和。

答案 4 :(得分:0)

试试这个

        int a,b,c;
        for (a=1;a<120;a++)     {     
            for(b=120;b>0;b--){
                c= 120-(a+b);
                System.out.println(c+">"+(a+b)+" && "+(c*c)+" == "+((a*a)+(b*b)));
                if (((c) > (a+b)) && ((c*c)==(a*a)+(b*b))){
                        System.out.println(a + " , " + b +" , " + c);
                        System.out.println("**************");

                    }
                }        
            }
        }

并检查自己

-66>186 && 4356 == 17330
-65>185 && 4225 == 17137
-64>184 && 4096 == 16946
-63>183 && 3969 == 16757
-62>182 && 3844 == 16570
-61>181 && 3721 == 16385
-60>180 && 3600 == 16202
-59>179 && 3481 == 16021
-58>178 && 3364 == 15842

...