[英]Finding all Indices of a number from an Array (Java)
假設我有一個數組:
int [] I = { 1, 3, 6, 3, 7,3, 9, 3};
int value = 3;
我有一個 for 循環來跟蹤值的出現次數:
int counter = 0;
for(int x = 0; x < I.length; x++)
{
if(I[x] == value)
{
counter++;
}
}
我創建了一個長度等於出現次數的新數組,它可以存儲原始數組中出現的所有索引:
int [] index = new int [counter];
for(int x = 0; x < index.length; x++)
{
for(int i = 0; i<I.length; i++)
{
if(I[i] == value){
index[x] = i;
}
}
}
但是,當我打印我的索引數組時,當我想要所有索引時,我只打印最后一個索引,計數器等於的次數。
for(int i = 0; i<index.length; i++)
{
System.out.println(index[i]);
}
它只打印“7”(最后一個索引)3 次。 我該如何解決這個問題,以便我擁有一個包含所有索引的數組? 謝謝你。
您的第二個for
循環不應嵌套; 你應該只在找到匹配項時增加x
。 就像是,
for (int i = 0, x = 0; i < I.length; i++) {
if (I[i] == value) {
index[x] = i;
x++;
}
}
假設您使用的是 Java 8+,您可以在數組中的索引范圍上編寫一個filter()
。 喜歡,
int[] index = IntStream.range(0, I.length).filter(i -> I[i] == value).toArray();
System.out.println(Arrays.toString(index));
當您遍歷原始數組I
時,只需刪除外部for循環並存儲到index
數組中。 您的代碼的問題在於,由於您對index
數組中的每個索引重復一次迭代,因此最終會得到最后一個找到的索引(在您的情況下為 7)。
for(int i = 0, x = 0; i < I.length; i++) {
if(I[i] == value) {
index[x++] = i;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.