// Я написал метод, у него есть 3 типа воркеров: Менеджер, владелец и работник
public static int costByType() {
ArrayList<Worker> workers = new ArrayList<>();
String type;
int cost = 0;
System.out.println("Enter type of worker[M/m][W/w][O/o] for finish enter [F/f]:");
type = s.nextLine();
while(!type.equalsIgnoreCase("F")) {
for (Worker w : workers) {
if (type.equalsIgnoreCase("M")) {
cost += ((Manager) w).getSalary() + ((Manager) w).getBonus();
} else if (type.equalsIgnoreCase("W")) {
cost += ((Worker) w).getSalary();
} else if (type.equalsIgnoreCase("O")) {
cost += ((Owner) w).getSalary() + ((Owner) w).getBonus() +Owner.BASE;
}
}
}
return cost;
}
// Цикл while запускает список массивов, находит тип работника и суммирует значения Код ничего не возвращает. Вместо этого он выполняет сканирование символов в цикле снова и снова **** Спасибо.




Эта часть
System.out.println("Enter type of worker[M/m][W/w][O/o] for finish enter [F/f]:");
type = s.nextLine();
нужно пройти в ваш цикл!
Когда вы ожидаете, что пользователь будет вводить значения несколько раз, однократное получение ввода не поможет!
Это связано с тем, что ваши «работники» ArrayList были запрошены, но никогда не обновлялись. Другими словами, ваш ArrayList не содержит ни одного работника.
Сначала заполните рабочий список рабочих, передайте его функции, такой как costByType (workers), вместо того, чтобы создавать его внутри своей функции, а затем вместо этого используйте цикл do while. что-то вроде этого.
do {
System.out.println("Enter type of worker[M/m][W/w][O/o] for finish enter [F/f]:");
type = src.nextLine();
for (Worker w : workers) {
if (type.equalsIgnoreCase("M")) {
cost += ((Manager) w).getSalary() + ((Manager) w).getBonus();
} else if (type.equalsIgnoreCase("W")) {
cost += ((Worker) w).getSalary();
} else if (type.equalsIgnoreCase("O")) {
cost += ((Owner) w).getSalary() + ((Owner) w).getBonus() +Owner.BASE;
}
}
} while(!type.equalsIgnoreCase("F"));
**i changed the code:**
public static int costByType(ArrayList<Worker> workers) {
String type;
int cost = 0;
do {
System.out.println("Enter type of worker[M/m][W/w][O/o] for finish enter [F/f]:");
type = s.nextLine();
for (Worker w : workers) {
if (type.equalsIgnoreCase("M") && (w instanceof Manager)) {
cost += ((Manager) w).getSalary() + ((Manager) w).getBonus();
} else if (type.equalsIgnoreCase("W") && (w instanceof Worker)) {
cost += ((Worker) w).getSalary();
} else if (type.equalsIgnoreCase("O") && (w instanceof Owner)) {
cost += ((Owner) w).getSalary() + ((Owner) w).getBonus() + Owner.BASE;
}
}
return cost;
} while (!type.equalsIgnoreCase("F"));
}
//теперь это не зацикливается после того, как покажет стоимость. Он должен запускаться снова и показывать стоимость, пока String не будет f
если я помещу его внутрь, он не распознает тип в условии while while(!type.equalsIgnoreCase("F")) {