2013-12-09 83 views
0

這是我的代碼,它工作得很好。關於數組的問題

import java.util.Random; 
class apples 
{ 
    public static void main(String args[]) 
    { 
     Random rand = new Random(); 
     int frequency[] = new int[7]; 

     for(int roll = 1;roll < 1000;roll++){ 
      ++frequency[1+rand.nextInt(6)]; 
     } 

     System.out.println("Face\tFrequency"); 

     for(int face = 1;face < frequency.length;face++){ 
      System.out.println(face + "\t" + frequency[face]); 
     } 
    } 
} 

當我刪除了「++」操作我不明白這行代碼

++frequency[1+rand.nextInt(6)]; 

,它不能被編譯。我知道它會爲從0到5生成的randon數字加1,但爲什麼在頻率前面有一個「++」?爲什麼需要將「++」運算符放在那裏?

+1

錯誤是什麼? – Paperwaste

+0

可能這只是一個警告,聲明什麼都不做;不是編譯器錯誤。如果你能夠運行該程序,那麼這不是一個錯誤,而是一個警告。 – AndyG

回答

3

++運算符正在遞增指定索引處的頻率。在這種情況下,它是相同的話說:

for(int roll = 1;roll < 1000;roll++){ 
    int index = 1+rand.nextInt(6); 
    frequency[index] = frequency[index] + 1; 
} 

卸下++運營商,你留下了:

for(int roll = 1;roll < 1000;roll++){ 
    frequency[1+rand.nextInt(6)]; 
} 

frequency[1+rand.nextInt(6)]是沒有意義的;這不是一種手術,它什麼都不做。


編輯:

也許更好地說明:讓x是值frequency陣列中查找。那麼原來的等價於:

for(int roll = 1;roll < 1000;roll++){ 
    int x = frequency[1+rand.nextInt(6)]; 
    ++x; // Equivalent to "x = x + 1" 
} 

如果刪除增量運算反之,你得到的循環是:

for(int roll = 1;roll < 1000;roll++){ 
    int x = frequency[1+rand.nextInt(6)]; 
    x; // ...what? 
} 
0

沒有++着眼於數組的內容的聲明,但沒有對價值做任何事情。添加++運算符會告訴它增加在那裏找到的值。

你可能被認爲是frequency[1+rand.nextInt(6)]增加值到數組。不是這樣。它從隨機位置查找內存中的位置。

0

++是

int i = 1+rand.nextInt(6); 
frequency[i] = frequency[i] + 1; 

卸下它會導致不執行增量表達的簡寫。

0

該行相當於這行代碼

int index = 1+rand.nextInt(6); 
frequency[index] = frequency[index]+1 ; 

所以如果你刪除「++」你做不完全像下面的語句:

int x= 5; 
x; 

所以它給你錯誤