有谁能告诉我以下代码有什么问题。它没有显示任何结果。
整数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("**************");
}
}
}
}
答案 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
...