2016-12-13 100 views
-1

我需要第二個for循環來拾取它停止的地方。每當if語句是true我需要一個插槽來填充第一個for循環中使用的數組。但我不想讓相同的關鍵值繼續增加。我需要第二個for循環移動到下一個鍵值。 (在下面的代碼,arrl是具有值對象的ArrayList)Java for循環需要拾取它停止的地方

int temp = 0; 
int count = 0; 
for(int i = 0; i < eeVal.length; i++) 
{ 
    count= 0; 
    for(int j = temp; j < arrl.size(); j++) 
    { 
     if(arrl.get(j).getValue() == 1 && count == 0) 
     { 
      eeVal[i] = arrl.get(j); 
      count++; 
      temp=j; 
     } 
    } 
} 
} 
return eeVal; 
+0

爲什麼不給j添加一個? 'j ++' – Thrasher

+0

我不知道它會從哪裏離開@Thrasher – Steve

+0

請澄清你在做什麼。你有一個數組和2個列表,2個索引... arrl和arr的大小是否一樣?這是什麼目的? –

回答

2

需要另一個變量來跟蹤在內部循環已達到了。像下面這樣:

int temp = 0; 

for(int i = 0; i < eeVal.length; i++) 
{ 
    for(int j = temp; j < arrl.size(); j++) 
    { 
     if(arrl.get(j).getValue() == 1) 
     { 
      eeVal[i] = arrl.get(j); 
     } 
     temp=j; 
    } 
} 
} 
return eeVal; 

這樣,一旦外部環路周圍運行第二次,內環將從「臨時」開始,直到循環結束。

+0

我希望我能正確理解您的問題......您可能需要還要更改eeVal [temp] = arrl.get(j),以便您可以存儲正確的索引。 – Abdulgood89

+0

你做到了。我更新了原始問題中的代碼,因爲它仍然不起作用 – Steve

+0

嘗試將eeVal [i]更改爲eeVal [temp] – Abdulgood89

0

從你的解釋,這聽起來像你不想要內部for循環。需要使用變量手動控制arrl的遍歷,例如`cnt',只有在滿足您的增加條件時纔會增加該變量。

0

您可能正在尋找的是List

在你的答案中,你不需要第一個循環。這個問題雖然 - 索引i可以超出界限。

int i = 0; 
for(int j = 0; j < arrl.size(); j++) { 
    if(arrl.get(j).getValue() == 1) { 
     eeVal[i++] = arrl.get(j); 
    } 
} 
return eeVal; 

您需要的是動態集合,如List。 使用列表(我稱這種類型爲MyType)。

List<MyType> vals = new ArrayList<>(); 
for(MyType item : arrl) { 
    if(item.getValue() == 1) { 
     vals.add(arrl.get(j)); 
    } 
} 
return vals.toArray(new MyType[vals.size()]); 
0

代碼正在拾取最後一個正確值的位置。當我想要知道我從哪裏離開時,我需要給j加1。

int count2 = 0; 
int progress = 0; 
for(int i = 0; i < retVal[h].length; i++) 
{ 
    count2 = 0; 
    for(int j = progress; j < arr.size(); j++) 
    { 
     if(arr.get(j).getLevel() == h && count2==0) 
     { 
      retVal[h][i] = arr.get(j); 
      count2++; 
      progress = j+1; 
     } 
    } 
} 
return retVal;