Поиск всех индексов числа из массива (Java) - PullRequest
0 голосов
/ 27 октября 2019

Скажем, у меня есть массив:

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 раза. Как мне исправить это, чтобы у меня был массив всех индексов? Спасибо.

Ответы [ 2 ]

1 голос
/ 27 октября 2019

Ваш второй 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));
0 голосов
/ 27 октября 2019

Просто удалите внешний цикл для и сохраните его в массиве index при выполнении итерации по исходному массиву I. Проблема с вашим кодом заключается в том, что, поскольку вы повторяете итерации один раз для каждого индекса в массиве index, вы получаете последний найденный индекс (7 в вашем случае).

for(int i = 0, x = 0; i < I.length; i++)  {
    if(I[i] == value) {
        index[x++] = i;
    }       
}
...