Суммарные значения методов одного типа в ArrayList в java

// Я написал метод, у него есть 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 запускает список массивов, находит тип работника и суммирует значения Код ничего не возвращает. Вместо этого он выполняет сканирование символов в цикле снова и снова **** Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
74
3

Ответы 3

Эта часть

System.out.println("Enter type of worker[M/m][W/w][O/o] for finish enter [F/f]:");
type = s.nextLine();

нужно пройти в ваш цикл!

Когда вы ожидаете, что пользователь будет вводить значения несколько раз, однократное получение ввода не поможет!

если я помещу его внутрь, он не распознает тип в условии while while(!type.equalsIgnoreCase("F")) {

ליהי בן יוסף 16.03.2019 10:48

Это связано с тем, что ваши «работники» 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

Другие вопросы по теме