2017-05-26 146 views
1

该表达式是从左到右解析的吗?我试图解释解析结果,但最后的结果是错误的。表达式的结果和解析结果是什么j + = j- = j * j和j + = j * = j- = j? (倍数等于)

int j=10, k=10; 
j+=j-=j*=j; //j=j+(j-=j*=j)=j+(j-j*j) 
k+=k*=k-=k; //k=k+k*k-k; 
System.out.println(j+";"+k); 
+1

*但最后的结果是错误的。*或者说你只是觉得这是不对的 –

+0

我已运行结果为-80和10.But我的结果是根据我的解析结果-80和100。 – flower

+1

处理像药物这样的表达:“只是说不! –

回答

3

任务从右向左被解析。您曾表示

j+=j-=j*=j; 

j=j+(j-j*j); 

的方式是正确的,但操作的顺序可能会被得到更好的表达:

j=j+(j-(j*j))); 

同样,你可以重写涉及分配k为:

k=k+(k*(k-k)); 

-80和10分别是正确的答案。

+0

分配从右向左进行解析。还是从左到右?它是否正常? – flower

+1

我将以k + = k * = k- = k为例。首先,评估k- = k,评估最右边的分配。然后,评估继续向左移动 – FigletNewton

2

我试图提供一点更清晰的变化,通过每一步到底发生了什么。

请记住结果是从右向左分析的。

int j=10, k=10; 

    j += j -= j *= j; 
//   j *= j ---> j = 10*10 = 100 
//j += j -= 100 
//  j -= 100  ---> j = 10-100 = -90 
//j += -90   ---> j = 10+(-90) = -80 
//j = -80 

    k += k *= k -= k; 
//   k -= k ---> k = 10-10 = 0 
//k += k *= 0 
//  k *= 0  ---> k = 10*0 = 0 
//k += 0    ---> k = 10+0 = 10 
//k = 10 

    System.out.println(j+";"+k); //Prints -80;10