2017-04-11 70 views
2

經過一番研究,我發現如何找到二維數組中的項目的索引。然而,我只是在一個值後面,行號以及如果你正在尋找的物品出現多次? 你將如何存儲所有這些時間的行號?查找二維數組中的項目的索引

for(int j = 0; j < size; j++) 
{ 
    if (arr[i][j] == 88) 
    { 
     return i; // The value i wanna store 
     break; 
    } 
} 

如果數字88出現多次,我該如何存儲所有不同的位置,並稍後檢索它?

+2

使用arrayList來存儲找到的值,因爲您不知道使用數組的長度不是最佳情況。 –

+1

這取決於你是否真的關心所有的事件或只是一個。如果您關心所有事件,則可以使用數組列表來存儲索引。 – nbro

+0

不要做休息聲明。它將繼續循環 – Dakoda

回答

3

您可以將所需的值存儲在List中。

List<Integer> rows = new ArrayList<>(); 
for (int i = 0; i < size; i++) { 
    for (int j = 0; j < size; j++) { 
     if (arr[i][j] == 88) { 
      rows.Add(i); // The value i wanna store 
      break; // exit inner loop and continue with next row 
     } 
    } 
} 
+0

布拉沃非常感謝!這工作! – percy

+2

更好的是,就像Ousmane展示一樣,使它成爲Integer的強類型列表。我會更新我的答案。 –

2

只是一個值後,我敢,行號 但如果88出現不止一次,我怎麼能存儲所有不同 位置,後來找回?

考慮到你不知道你要找的值有多少重複的副本,我建議使用ArrayList來存儲索引。

環之前創建這樣的:

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

然後在if塊只是爲了你發現到ArrayList值增加索引值:

if (arr[i][j] == 88){ 
    indexList.add(i); 
    break; 
} 

可以再返回ArrayList如果您的方法需要返回數據:

return indexList; // after the loops have finished processing 

但是,如果方法返回類型爲void,那麼您可以簡單地忽略return indexList;

+1

他/她不想要這個值,他們想要顯示的行索引 –

+0

@RAZ_Muh_Taz謝謝,我會更新 –

+0

'valuesList.add(arr [i] [j]);'只會在列表中添加88 ,你應該修改它以存儲'i'或'j'或者爲每個列表分配一個或者具有單個自定義類類型列表,其對象可以包含一對'i'和'j' –