int[] array = new int[] {5,7,7,8,8,10};
int target = 8;
int first = 0;
for(int i=0;i<array.length;i++) {
if (array[i] == target)
return i;
else
return -1;
}
// Output should be 3,4
Я запускаю цикл от первого до последнего элемента. но он даст индекс 4. Как мы можем получить оба индекса 3 и 4? я попробовал использовать два цикла: один от первого к последнему, а другой от последнего к первому.
«Выход должен быть 3,4» — технически этот код ничего не выводит. Он возвращает целое число. И, конечно же, «3,4» не является целым числом. Что вы хотите, чтобы этот код возвращал вместо этого? Массив целых чисел? Что-то другое? Какую попытку вы предпринимаете для этого?
Кстати... "но индекс будет равен 4" - Вы уверены? Если я помещу этот код в метод и вызову этот метод, результат будет -1
. Возможно, вы допустили здесь некоторые ошибки или ложные предположения.
Создайте String[] indexArray
такой же длины, как и второй. Поместите туда каждый найденный индекс, а затем объедините их в String
return IntStream.range(0, array.length).filter(i -> array[i] == target).toArray();
Re: «Выходное значение должно быть 3,4», затем замените return i
на System.out,println(i)
(или аналогичное в зависимости от формата) и удалите else return -1;
.
Вам нужно удалить возврат else из for и добавить в список индекс
public static void main(String[] args) {
System.out.println(getIndices(8));
}
private static List<Integer> getIndices(int target) {
int[] array = new int[] {5, 7, 7, 8, 8, 10};
List<Integer> indices = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
indices.add(i);
}
}
return indices;
}
Ваш метод непродуман, поскольку его нельзя применить ни к одному списку. Лучше всего передать список в качестве аргумента и перебирать его. Вы также можете отметить, что использование списков упрощает сохранение и возврат результатов.
Есть много способов. Вот два.
public static int[] findIndices(int[] array, int target) {
return IntStream.range(0,array.length)
.filter(i->array[i] == target).toArray();
}
public static int[] findIndices(int[] array, int target) {
int[] results = new int[array.length];
int pos = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
results[pos++] = i;
}
}
return Arrays.copyOfRange(results,0,pos);
}
Не возвращайтесь и вместо этого поместите каждый
i
, который вы найдете, в список.