Проблема с поиском в списке элементов и вывода
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;
}
