Поиск всех индексов определенного элемента в ArrayList (Int)

#java

#ява #java

Вопрос:

Недавно я увлекся программированием на Java (возможно, это уже становится слишком сложным для меня), и я ежедневно выполняю некоторые упражнения для практики. Одна из задач, которую мне нужно выполнить, это выполнить поиск элемента (int), и если он находится в массиве, должен отображаться индекс (все индексы должны отображаться, если элементы дублируются в массиве).

Вот код, который у меня есть на данный момент!

 
import java.util.ArrayList;
import java.util.Scanner;

public class IndexOf {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        ArrayList<Integer> list = new ArrayList<>();
        while (true) {
            int input = Integer.valueOf(scanner.nextLine());
            if (input == -1) {
                break;
            }

            list.add(input);
        }

        System.out.println("");

        // implement here finding the indices of a number
        System.out.println("Search for?");
        int arraySize = list.size();
        int numToSearch = Integer.valueOf(scanner.nextLine());
         
        for(int i = 0; i <arraySize-1; i  ){
           int pos = list.indexOf(numToSearch);
            if(list.indexOf(i)==pos){
              System.out.print(numToSearch " is at Index: " pos);
              
              
             
              
          }
            
          
            
        }
        
        
       
        
            
        
        
       
    }
}
  

До сих пор мне удавалось заставить его печатать индекс элемента, который я ищу, но он делает это только для первого найденного правильного индекса.

Извините за неуклюжий код, я еще не многому научился с точки зрения аккуратного кода!

Комментарии:

1. Вам не нужно использовать indexOf . Просто используйте if (list.get(i).equals(numToSearch)) .

2. @AndyTurner Огромное вам спасибо! У меня было предчувствие, что я слишком много думаю об этом, все еще пытаясь понять основы 👍

Ответ №1:

В последнем цикле вы проверяли равенство между индексом numToSearch in list и индексом 0...arraySize-2 in list . Если я неправильно понимаю вопрос, правильным подходом должна быть проверка равенства каждого элемента массива и numToSearch . Затем распечатайте строку с текущим индексом, в котором вы находитесь.

Это может быть представлено следующим образом:

 for (int i = 0; i < arraySize; i  ) {
    if (list.get(i) == numToSearch) {
        System.out.println(numToSearch   " is at Index: "   i);
    }
}
  

Комментарии:

1. Это решило мою проблему, вы правильно прочитали вопрос. Мне трудно сформулировать свои вопросы, когда я новичок в этой теме, извините за это 🙂 — Большое вам спасибо! Многому научился у вас.