Как вывести текущий объект массива в цикле

336
18 октября 2017, 04:54

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

public class Test {
    public static void main(String[] args) {
        System.out.println("Enter a department name: ");
        Employee [] employees = new Employee[5];
        employees[0] = new Employee("Worker1", Employee.Department.DEPARTMENT_1,1500);
        employees[1] = new Employee("Worker2",Employee.Department.DEPARTMENT_2,1700);
        employees[2] = new Employee("Worker3",Employee.Department.DEPARTMENT_3,2000);
        employees[3] = new Employee("Worker4",Employee.Department.DEPARTMENT_1,3000);
        employees[4] = new Employee("Worker5",Employee.Department.DEPARTMENT_3,1100);
        Scanner scn = new Scanner(System.in);
        String worker = scn.nextLine();
        int workerCount  = 0;
        while (workerCount < employees.length) {
            if (worker.equals(Employee.Department.DEPARTMENT_1.name())) {
                System.out.println(employees[workerCount].getName());
                workerCount++;
            }
        }
    }
}

//Так я получаю NullPointerException 
 
     int workerCount  = 0; 
        while (workerCount < employees.length) { 
            if (worker.equals(employees[workerCount].getDepartmantName().name())) { 
                System.out.println(employees[workerCount].getName()); 
            } 
            workerCount++; 
        }

public class Employee { 
 
    private String name; 
    private Department departmantName; 
    private double salary; 
 
    public String getName() { 
        return name; 
    } 
 
    public Department getDepartmantName() { 
        return departmantName; 
    } 
 
    public double getSalary() { 
        return salary; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public void setDepartmantName(Department departmantName) { 
        this.departmantName = departmantName; 
    } 
 
    public void setSalary(double salary) { 
        this.salary = salary; 
    } 
 
 
    public Employee(String name, Department departmentName, double salary) { 
        this.name = name; 
        this.departmantName = departmantName; 
        this.salary = salary; 
    } 
 
    public enum Department { 
        DEPARTMENT_1, DEPARTMENT_2, DEPARTMENT_3 
    } 
 
 
}

Answer 1
  1. У Вас в конструкторе Employee() очепятка и из-за нее вы присваиваете имя департамента не из параметров, а самому себе.
  2. См. выше по поводу счетчика. Я бы вообще от него отказался и юзал цикл foreach:

    for (Employee employee : employees) {
        if (dept.equals(employee.getDepartmantName().name())) {
            System.out.println(employee.getName());
        }
    }
    
  3. Вас не запутывает то, что просите ввести имя департамента, а присваиваете введенное значение переменной worker?

Answer 2

Во-первых, вынесите workerCount++ за пределы блока if, иначе вы будете двигаться по циклу только если имя совпало. Во-вторых, сейчас вы сравниваете не с названием отдела текущего сотрудника, а только с первым отделом : worker.equals(employees[workerCount].getDepartment().name())

READ ALSO
Как реализовать класс Date и Calendar [требует правки]

Как реализовать класс Date и Calendar [требует правки]

Определить класс Data и класс Calendar на определённый месяц, использующий объект Data в качестве поляОбъявить массив объектов Calendar на год

249
Retrofit + RxJava + Unit test

Retrofit + RxJava + Unit test

Есть unit test для Retrofit запросы щас мне возвращают типизированые ответы от сервера Call<List<GroupObject>> в таком виде достаточно просто его тестировать:

306
Для чего нужны переменные счетчики

Для чего нужны переменные счетчики

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

273
Как сделать рестарт активити?

Как сделать рестарт активити?

Добрый деньВ приложении есть метод который делает много чего

269