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