添加两个double值导致value等于java中的第二个double值

mj1*_*829 1 java double add conditional-statements

以下是一个例子:

        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);
        }
Run Code Online (Sandbox Code Playgroud)

得到:

1.0
-0.001953125
-0.00390625
-0.0078125
-0.015625
-0.03125
-0.0625
0.125
Run Code Online (Sandbox Code Playgroud)

还有这个:

        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);
        }
Run Code Online (Sandbox Code Playgroud)

得到:

1.0
0.998046875
0.994140625
0.986328125
1.001953125
0.970703125
1.033203125
1.158203125
Run Code Online (Sandbox Code Playgroud)

这是否意味着b的值首先在第一个中更改为0(没有括号)或直接设置为a [i]的值?!

用?for if/else另外意味着我必须在条件/ if/else部分周围使用括号?!谢谢.

Jac*_*ack 7

这是因为运营商的优先级,b + v[i] == 0 ? a[i] : -a[i]被解析为

(b + v[i]) == 0 ? a[i] : -a[i]
Run Code Online (Sandbox Code Playgroud)

由于+具有更高的优先级==,表达式具有与您认为的语义不同的语义.

您可以通过使用括号来强制执行评估顺序或使用+=在此特定情况下使问题消失的运算符来避免此问题.