2013-10-11 51 views
-36

我在Java中使用List集合,我正在使用迭代集合來處理創建的整數值列表。爲什麼它是一個無限循環?

爲什麼這段代碼無限循環?

int i = 0; 
int j = 0; 

List<Integer> li = new ArrayList<Integer>(); 

for (i = 0; i < 10; i++) { 
    li.add(i); 
} 

do { 
    System.out.println(li.get(j)); 
} while(j < li.size()); 
+5

嘗試向j添加內容。 –

+11

我強烈建議您學會使用調試器。如果您曾經使用過它,您將立即發現您的錯誤。 –

+1

順便說一句,如果列表爲空,因爲'do'塊總是被執行*至少一次*。只需使用'while'循環。 – ozgur

回答

36

您忘記/錯過了在do...while循環中遞增計數器變量。

請問j++響鈴嗎?

10

它是無限的,因爲你永遠不會改變的j值 - 每次從li讀取第一個值的時間。 List<>集合在讀取它們時不會刪除項目。如果您需要該行爲,您應該查找StackQueue集合。

do { 
System.out.println(li.get(j)); 
j++; // you are missing this line 
} while(j < li.size()); 
14

原因j總是小於li.size()

5

你忘了遞增循環計數變量(j

5

你忘了增加(j++)你jdodo子句中 - while循環。

3

如果你不增加Ĵ 條件

while(j < li.size()); 

將始終是相同的

所以要J ++在你的第二個循環

do { 
System.out.println(li.get(j)); 
j++; 
} while(j < li.size()); 
4

這是因爲ü沒有執行對「j」的值進行任何遞增或遞減操作。 所以在每次編譯器找到j的值爲0,循環運行無限循環,因爲它發現do..while循環的條件爲真。

3

你應該增加計數器變量j。目前j總是小於li.size()

3

添加j++下面

System.out.println(li.get(j)); 
3

線如果while(j < li.size());檢查j值小於List

因爲j =00<10 (Which is your List size)大小始終是真實的結果代碼永遠不會終止,並進入無限循環。你可以做這樣的事情

do { 
    System.out.println(li.get(j)); 
    j++; 
} while(j < li.size()); 
3

你需要增加你的int j。您可以通過使用j++來實現此目的。您需要在do..while循環內執行此操作,在您的代碼行System.out.println(li.get(j));之後。

否則j將始終小於你的ArrayList li的大小,然後循環將運行無限

3

如果你想與最大值進行比較總是遞增變量在任何類型的循環。要檢查j小於一個值,在某個時間點,您需要在do....while()循環中執行其增量。 在循環因此,使用

j++; 

,那麼你的循環將只運行至j的值比要檢查它的最大值。

2

您錯過了更新計數器/迭代器j在循環中。由於j未更新,所以循環將無限期執行。

您將最終獲得li.get()方法調用返回的相同值,因爲傳遞的參數始終是相同的值。

要麼你應該更新的j在循環體的值:

do { 
    System.out.println(li.get(j)); 
    ++j; //Add this change 
} while(j < li.size()); 

do { 
    System.out.println(li.get(j)); 
} while(++j < li.size()); //Add this change 
3

你忘了增加計數器變量j。在當前的情況下,j將永遠不會大於或等於li.size(),實際上它的值永遠不會被修改爲終止循環。你應該使用下面的代碼來代替:

do 
{ 
    System.out.println(li.get(j)); 

    j++; //You missed this statement 

} 
while(j < li.size()); 
2

第一個for循環是好的,但在接下來的DO_WHILE循環,你不增加或更新循環指數(J),這就是爲什麼第二循環無限運行。

int i = 0; 
int j = 0; 

List<Integer> li = new ArrayList<Integer>(); 

for (i = 0; i < 10; i++) { 
    li.add(i); 
} 

do { 
    System.out.println(li.get(j)); 
    j++; //increament loop index or you may use j+=1; 
} while(j < li.size()); 
0

j是始終爲0 j被初始化值0,從不更新

1

您可以設置J = 0,但它永遠不會增加,以致它總是會Ĵ< li.size()。