簡體   English   中英

從數組中查找數字的所有索引(Java)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM