2013-05-19 66 views
0

我是Java的初學者,我有一個運行時錯誤問題。我已經正確回答了,但是我並不完全理解答案背後的概念。可能有人請解釋爲什麼B是正確答案的問題,謝謝:運行時錯誤Java

考慮以下聲明:

private ArrayList<String> list; 
... 
public void printAll() 
{ 
int index = 0; 
while (index < list.size) { 
index = index + 1; 
System.out.println(list.get(index)); 
    } 
} 

假設列表不爲空,下列哪一個是真正的關於調用printAll()?

a)僅當列表爲空時纔會發生運行時錯誤。

b)僅當列表不爲空時纔會發生運行時錯誤。

c)從不發生運行時錯誤。

d)總是發生運行時錯誤。 9

現在當索引= 9

而 -

E)每當列表具有偶數長度

回答

0
while (index < list.size) { 
index = index + 1; 
System.out.println(list.get(index)); 
} 

這裏index遞增之前訪問列表。所以它每次都會讀取一個元素。所以當列表不爲空時,運行時錯誤。

如果列表爲空,那麼條件while (index < list.size)將失敗,因此導致運行時錯誤的循環代碼將永遠不會執行。

雖然你的問題不相關的,正確的代碼,將閱讀後遞增index

while (index < list.size) { 
System.out.println(list.get(index)); 
index = index + 1; 
} 
+0

很有意義..所以如果列表是空的並且沒有添加任何內容,那麼它將會是好的,儘管這完全沒有意義。因此,在方法體動作之後必須出現增量 – user2240664

0

考慮列表具有10個項目, 然後指標爲0時,會發生運行時錯誤循環檢查9 < 10,它是真實的,在進入再加入1

指數成爲10,它結合了錯誤的發生

+0

是的我明白,但爲什麼運行時錯誤發生如果列表不是空的,因此B? – user2240664

0
while (index < list.size) { 
index = index + 1; 
System.out.println(list.get(index)); 
} 

情況1

:如果列表是空的,內容while循環永遠不會被執行。

殼體2

:如果列表不爲空,訪問最後一個元素將出現錯誤。因爲list.size上的元素不在列表中。

因此,僅當列表包含至少一個元素時纔會發生該錯誤。