Проблема с поиском в списке элементов и вывода

public class Menu {
    Scanner scanner = new Scanner(System.in);
    static List<String> listSouvenirs = new ArrayList<>();
    static List<String> listManufacturer = new ArrayList<>();
    static List<String> list = new ArrayList<>();




    public static void listAddSouvenirs(Souvenirs s){
        listSouvenirs.add(s.getName());
        listSouvenirs.add(s.getInfo());
        listSouvenirs.add(s.getDate());
        listSouvenirs.add(s.getPrice());

    }

    public static void listAddManufacturer(Manufacturer m){
        listManufacturer.add(m.getName());
        listManufacturer.add(m.getCountry());

    }


    public int menu1(){

        boolean b;
        do {
            System.out.println("Введите имя продукта, информацию от производителя, дату изготовления и цену");
            String prodStr1 = scanner.nextLine();
            String[] souvenirs = prodStr1.split("  ");
            Menu.listAddSouvenirs(new Souvenirs(souvenirs[0], souvenirs[1], souvenirs[2], souvenirs[3]));
            System.out.println("Введите имя производителя, город производителя");
            String prodStr2 = scanner.nextLine();
            String[] manufacturer = prodStr2.split("  ");
            Menu.listAddManufacturer(new Manufacturer(manufacturer[0], manufacturer[1]));
            System.out.println("Введите Y или y для продолжения");
            String check = scanner.nextLine().toLowerCase();
            b = check.contains("Y".toLowerCase());
        } while (b);
        return 1;
    }
 public int menu4(){

        System.out.println("Введите производителя что бы получить информацию");
        String el = scanner.nextLine();

        for(int i = 0; i < listManufacturer.size(); i++) {
            String str = listManufacturer.get(i);
            if(str.equals(el)) {
                int position = listManufacturer.indexOf(str);
                System.out.println(listManufacturer.get(position + 1));
                System.out.println(listManufacturer.get(position));
                int position2 = position / 2 * 4;
                System.out.println(listSouvenirs.get(position2 + 3));
                System.out.println(listSouvenirs.get(position2 + 2));
                System.out.println(listSouvenirs.get(position2 + 1));
                System.out.println(listSouvenirs.get(position2));
                System.out.println("______________________________________");
            }
        }
        return 4;
    }
}




public class Main {

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



        int n = 0;
        do {

            System.out.println("Введите номер для навигации в меню : ");
            int m = scanner.nextInt();
            switch (m) {
                case 1 -> menu.menu1();
                case 2 -> menu.menu2();
                case 3 -> menu.menu3();
                case 4 -> menu.menu4();
                case 5 -> menu.menu5();
                case 6 -> menu.menu6();
                case 7 -> menu.menu7();
                case 8 -> menu.menu8();
                case 9 -> menu.menu9();
                case 10 -> menu.menu10();
            }
            System.out.println("Введите 1 для перехода в меню");
            n = scanner.nextInt();
        } while (n == 1);

    }
}

Есть программа которая должна найти все похожие элементы в списке и что-то с ними сделать в даном случаи вывести некие данные по позиции отночительно главного объекта.Я не могу понять в чем проблема что я написал не так?Программа просто дублирует первое найденое значение

введите сюда описание изображения


Ответы (1 шт):

Автор решения: mesfex

Потому что int position = listManufacturer.indexOf(str); возвращает индекс, который попался первым, то есть у Вас listManufacturer содержит две одинаковые строки, но вторую он даже не будет смотреть. Т.к. уже нашел результат. Это реализация indexOf у ArrayList

@Override
public int indexOf(Object o) {
    E[] a = this.a;
    if (o == null) {
        for (int i = 0; i < a.length; i++)
            if (a[i] == null)
                return i;
    } else {
        for (int i = 0; i < a.length; i++)
            if (o.equals(a[i]))
                return i;
    }
    return -1;
}
→ Ссылка