2015-08-30 169 views
0

我在測試中錯過了三次這個問題。我似乎無法理解如何解決這個問題。任何幫助深表感謝。增量運算符

public class Test { 
     public static void main(String[] args) { 
      int j = 0; 
      int i = ++j + j * 5; 

      System.out.println("What is i? " + i); 
     } 
    } 
+1

解決究竟是什麼? – Nooble

+1

您是否嘗試過運行代碼來確定我將擁有的價值? –

+4

它返回6的原因是'++ j'是[pre-increment](http://stackoverflow.com/questions/2371118/how-do-the-post-increment-i-and-pre-increment- i-operators-work-in-java),它將'j'的值增加到1,並且它「預先」計算這條線,以便當計算這條線時,'j'的值已經是1。 1 + 1 * 5 = 6. – alfasin

回答

1

按Java的運算符優先級和評估順序,i等於6i被設置爲等於j其中預先遞增到1,並添加到其自身的產品和5,這是6

0

這裏要注意的一點是j++++j之間的差異。看到這一點:The difference between ++Var and Var++

牢記這一點,++j將返回1,和J的值更改爲1所以接下來的部分,j*5等於1 * 5,這是5所以,總體來說++j + j*5爲您提供了6

3

對於:

int i = ++j + j * 5; 

變量j是用表達++j每遞增1,也就是等於j + 1,j的值變更爲1。然後按照對的順序的規則在java中的操作,乘法被執行(j * 5)(1 * 5)在這個階段,所以目前我=乘法j的5.最後在產品中添加(j + 5)(1 + 5) = 6

您可以檢查此頁面,這是一種簡單的方式解釋:

http://introcs.cs.princeton.edu/java/11precedence/

0

Java有一個operator precedence規則,這意味着對於Java中包含運算符,後綴(j ++)和前綴(++ j)的任何數學表達式首先進行評估。還有left and right associativity這是您的語句如何解析。數學運算符(如+, - ,/,*)具有從左到右的關聯性。後綴和前綴具有從右到左的關聯性。

綜觀Java Grammar File一個發現

前綴增量表達式的值是 變量的值的新值被存儲

所以後,++ j爲1爲當前的聲明。

後綴增量表達式的值是存儲新值之前 變量的值。

因此,當前語句的j ++爲0。

所以,(++ j)的+ J * 5前綴評價之後變爲(1 +(1 * 5))= 6。

[編輯]

因此,語句如J ++ + j * 5將給你5作爲答案,因爲j在j ++(後綴增量)後變爲1,但j ++本身保持爲0。

0

如果在語句中出現++ j,則首先增加j的值,然後執行語句。但是,如果j ++出現在語句中,則會執行第一條語句,然後將值遞增。

要簡單地解決執行部分,您可以忽略++符號並簡化它。但不要忘記增量和簡化的順序。

0

根據java運算符優先級,++運算符的優先級高於+*運算符。以下是一步一步發生的事情:

第一個++j發生。由於j爲0,因此++j遞增j爲1. 現在表達式++j + 5 * j已變成1 + 5 * 1

現在我們有兩個運營商,+*。首先應用哪一個?查看運算符優先級圖表,您會發現*優先於+。所以首先發生5 * 1。乘法後,表達式看起來像1 + 5

1添加到5,我們得到6。所以...... i = 6是結果。

如果你想知道更多關於++運營商的信息,那麼YouTube上有一些體面的視頻。