Метод сумма значений того же типа в ArrayList в Java - PullRequest
0 голосов
/ 16 марта 2019

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

Ответы [ 3 ]

1 голос
/ 16 марта 2019

Эта часть

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

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

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

0 голосов
/ 16 марта 2019
**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"));
    }

// теперь это не цикл после того, как он показывает стоимость. Он должен работать снова и показывать стоимость, пока строка не станет f

0 голосов
/ 16 марта 2019

Это потому, что ваш "рабочий" ArrayList был запрошен, но не обновленДругими словами, ваш ArrayList не содержит в себе ни одного работника.

Сначала заполните работника в списке работников, передайте его функции как costByType (worker) вместо создания ее внутри вашей функции, а затем используйте 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...