2015-08-19 18 views
0
++frequency[2] ; 

我認爲沒有初始化數組的默認值是0 海事組織,這意味着評估 frequency[2]它是一個零,然後把它加1,並分配它的指數2. 任何人都可以解釋如何得到這個代碼的輸出。在這點上我真的很努力。請問這個預增量的陣列工作

public static void main(String ars[]) 
{ 

    int responses[] = {1,2,4,4}; 
    int freq[] = new int[5]; 
    for(int answer = 1;answer < responses.length;answer++){ 
     ++freq[responses[answer]]; 
    } 
    for (int rating = 1; rating < freq.length; rating++) 
     System.out.printf("%6d%10d\n", rating, freq[ rating ]); 

//輸出

 1   0 
    2   1 
    3   0 
    4   2 
+4

那麼,當你嘗試它會發生什麼? –

+0

如果您認爲[Wikipedia](https://en.wikipedia.org/wiki/Uninitialized_variable),它說,* Java沒有未初始化的變量。沒有顯式初始值設定項和數組元素的類和對象的字段會自動使用其類型的默認值進行初始化(布爾值爲false,所有數值類型爲0,所有參考類型爲null)。 Java中的局部變量在被訪問之前必須明確地分配給它,或者它是一個編譯錯誤。* – lurker

回答

1

是的,你是。

int[] frequency = new int[3]; 
System.out.println(frequency[2]); 
System.out.println(++frequency[2]); 
System.out.println(frequency[2]); 

打印:

0 
1 
1 

編輯:作爲潛伏者在這裏How does this pre increment on arrays work說,這個答案是有效的Java,但它可能不適合其它語言。

+1

但是這個演示不能*保證*它。例如,可能在C中執行相同的代碼,具體取決於內存的情況。什麼*保證*這是關於變量初始化的語言政策。 – lurker

+0

我回答了關於Java的問題,但是,是的,在示例中指出這一點會更好。 – Emd4600