2017-05-26 148 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