繁体   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