2012-06-14 113 views
1

我知道這是一個非常基本的問題但是。基本遞增

我理解背後的概念。 n ++,++ n,n--, - n。無論其

public static void main(String[] args){ 

    int count = 1; 
    for(int i =1;i<=10;++i){ 

    count = count * i; 
    System.out.print(count); 
    } 
} 

因此,將打印:1個2 3 4 5 6 7 8 9 10

我的問題是。爲什麼如果我增加爲++我不是那麼我然後被視爲2,而不是1. Inst ++ i的點,在我被另一個操作操縱之前遞增i?

+0

只有在循環內部的代碼執行後,增量纔會發生。您初始化爲1. –

+1

此外,應該打印1,2,6,24等,因爲你正在成倍增長。 – Thomas

+0

嗯,但計數永遠不會改變..所以你只是乘以我的是1. – user1419012

回答

3

直到for循環的第一次迭代後纔會調用增量。

雖然這是事實,

j = i++; 
k = ++i; 

返回不同的結果,在這種情況下是所謂的每for循環的最後一個獨立的行認爲++i的。

0

你想使用i ++這是一個後增量。 ++我被稱爲preincrement,其差異正如你所指出的那樣。

+0

我相信++在使用這種方式時,我實際上對記憶效率更高。但最終的結果是一樣的。 – SimplyPanda

+0

@ user1432824你是說循環不適用於預增量? –

+0

沒有戴夫我知道這兩個將工作..我只是想知道在這種情況下兩者之間的區別是什麼。 :) – user1419012

11

++ i的要點是,在i被另一個操作操縱之前增加i嗎?

++ii++之間的差異只有當它用作一個更大的表達式的一部分,例如重要的

int j = ++i; // Increment then use the new value for the assignment 
int k = i++; // Increment, but use the old value for the assignment 

在這種情況下,在循環中,的每次迭代的自身結束時執行的操作。所以,你的循環相當於:

int count = 1; 
// Introduce a new scope for i, just like the for loop does 
{ 
    // Declaration and initialization 
    int i = 1; 
    // Condition 
    while (i <= 10) { 
     count = count * i; 
     System.out.print(count); 

     // Now comes the final expression in the for loop "header" 
     ++i; 
    } 
} 

現在,在那裏是不會有所作爲的所有最終改變++ii++ - 表達式的值不用於任何東西。

+1

好吧calarify int j = ++ i; //遞增,但將舊值用於賦值 int k = i ++; //遞增,然後使用新的值作爲賦值..... meanig表示j = i + 1但是k = j? – user1419012

+0

@ user1419012:假設每個語句都是分開的(而不是將兩個語句放在一起考慮),在分配之後''j'比'i'少1 *,但'k'和'​​i'將具有相同的值。 –

+0

j比我多一個嗎?我同意k會和我有同樣的價值。 – user1419012

0

在這種情況下++i發生在循環結束時,它會遞增,然後檢查新值是否仍然符合終止條件。

而且,也不會輸出是:

count i 
1 * 1 = 1 
1 * 2 = 2 
2 * 3 = 6 
6 * 4 = 24 

0

for循環您寫的是一樣的:

i = 1; 
while(i<=10) { 
    count = count * i; 
    System.out.print(count); 
    i = i + 1; 
} 

所以這就是爲什麼!

0

對於i = 0和i < 1 = 10, print i, 然後預先遞增i。 (++ i/i ++在這裏沒有區別)。

這裏試試這個雖然:

int i=1; 
while(i <= 10) 
    System.out.print(++i); 


i = 1; 
while (i <= 10) 
    System.out.print(i++); 

0

作爲除了其他的答案,超過for(int i=1;i<=10;i++)寧願for(int i=1;i<=10;++i)的歷史原因是,++i並不需要存儲一個額外的變量的i舊值。因此,++ii++快,雖然速度改善可以忽略不計。在現代編譯器中,這種速度改進是作爲優化來完成的,所以這兩個部分產生相同的編譯器輸出。但是,由於++i總是與i++一樣快或更快(例如,在舊的C++編譯器上),因此許多有經驗的程序總是在循環內使用++i

正如其他答案所述,這兩段代碼在功能上是等效的(在for循環的情況下)。