1

例として、次の1つです。

        double b = 1.0; 
        int v[] = {1,1,1,0,1,0,1}; 
        double a[] = {0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, -0.125};
        System.out.println(b);
        for(int i = 0; i <7; i++)
        {
            b = b + v[i] == 0 ? a[i] : -a[i];
            System.out.println(b);
        }

与える:

1.0
-0.001953125
-0.00390625
-0.0078125
-0.015625
-0.03125
-0.0625
0.125

そしてこれ:

        double b = 1.0; 
        int v[] = {1,1,1,0,1,0,1}; 
        double a[] = {0.001953125, 0.00390625, 0.0078125, 0.015625, 0.03125, 0.0625, -0.125};
        System.out.println(b);
        for(int i = 0; i <7; i++)
        {
            b = b + (v[i] == 0 ? a[i] : -a[i]);
            System.out.println(b);
        }

与える:

1.0
0.998046875
0.994140625
0.986328125
1.001953125
0.970703125
1.033203125
1.158203125

これは、bの値が最初の値(角かっこなし)で最初に0に変更されるか、a [i]の値に直接設定されることを意味しますか?!

?を使用する さらに、if / elseは、条件/ if / else部分を角かっこで囲む必要があることを意味しますか?!ありがとう。

4

1 に答える 1

7

これは、演算子の優先順位のため、次のb + v[i] == 0 ? a[i] : -a[i]ように解析されます。

(b + v[i]) == 0 ? a[i] : -a[i]

はより+も優先度が高いため==、式のセマンティクスは、考えているものとは異なります。

括弧を使用して評価順序を適用するか+=、この特定のケースで問題を解消する演算子を使用することで、問題を回避できます。

于 2012-11-14T23:51:18.577 に答える