0

次のコードの何が問題なのか、誰か教えてください。何の結果も示していません。

整数 a,b,c は直角三角形の辺です.(Project Euler problem 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("**************");

                }
            }   
        }
    }
4

5 に答える 5

4

簡単に言えば、次の式が原因です。

((c) > (a+b))

...有効な直角三角形の例ではtrueを返すことはありません.&&条件では両方のオペランドがtrueに評価される必要があるため、ifステートメントは実行されません。

次の行を挿入すると、これがはっきりとわかります。

System.out.println("C: " + c);
System.out.println("A+B: " + a+b);
于 2013-05-15T09:14:38.853 に答える
1

&& 条件の 2 番目の部分は、最初が true の場合、常に false になります。c > (a+b) の場合 c*c > (a+b)*(a+b) => c^2 > a^2 + b^2 + 2ab の場合 c^2 != a^2 + b ^2

于 2013-05-15T09:16:02.703 に答える
0

a+b は常に 121 ではありませんか? c を常に -1 にし、c > a+b を非論理的な比較にしますか? ここで何をしようとしているのですか?

とにかく、各 { の後にいくつかの System.outs を追加して、何が起こっているのかを理解してください。System.out.println( c + " " + a + " " + b + " " + (a+b) + " " + (c*c) + " " + ((a*a)+(b) も追加します*b))); 比較のすべてのパラメーターを表示して、 if自体の前に期待どおりの結果が得られるようにします。

于 2013-05-15T09:14:48.817 に答える
0

数学的には、この両方の条件が true になることは決してないため、&& は false になり、|| は false になります。ある状況で条件の 1 つが true の場合に機能します。

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

数値が 2 つの数値の合計よりも大きい場合、数値の 2 乗も 2 つの数値の 2 乗の合計よりも大きくなります。

于 2013-05-15T09:15:27.477 に答える
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

...

于 2013-05-15T09:18:38.687 に答える