Улучшено, что цикл не выполняется при попытке вызвать метод, который выдает исключение - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть 2 класса: 1. класс управления сотрудником, в котором есть массив сотрудников типа 2. и класс сотрудника.Я должен добавить сотрудника в arraylist после проверки уже существующего исключения.Код, который я имею в классе управления занятостью.

    ArrayList<Employee> eme = new ArrayList<Employee>();
    boolean addEmployee(Employee emp){

    for(Employee e:eme)
    {
    if (e.getEmpId()==emp.getEmpId())
      {
        throw new AlreadyExistsException();
      }
    else if  (e.getEmpId()!=emp.getEmpId())
      {
       eme.add(emp);
      }
    return true;
    }

В моем классе сотрудников у меня есть конструкторы, геттеры и сеттеры. В основном методе я создал объект класса управления сотрудниками em и вызвал метод addEmployee

    em.addEmployee(e1);

Проблема заключается в том, чтомассив данных в классе управления служащими равен нулю, цикл for не выполняется, и я не могу проверить, что для сотрудника уже существует исключение.Как решить это?(Это мое практическое задание)

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы можете просто выполнить условие if следующим образом:

public void addEmployee(Employee emp) throws Exception {
    if (eme.size() == 0) {                          // add as list is empty
        eme.add(emp);
    } else {
        for (Employee e : eme) {                    // your logic as it is
            if (e.getEmpId() == emp.getEmpId()) {
                throw new Exception();
            } else if (e.getEmpId() != emp.getEmpId()) {
                eme.add(emp);
            }
        }
    }
}

Вы можете настроить логику создания этого метода, возвращающего boolean, как требуется.Это оставлено для вас как упражнение!

0 голосов
/ 15 февраля 2019

Вы намеревались следующее.

public boolean addEmployee(Employee emp) {
    for (Employee e: eme) {
        if (e.getEmpId() == emp.getEmpId()) {
           throw new AlreadyExistsException();
        }
    }
    eme.add(emp);
    return true;
}

Здесь логический результат не требуется.

Добавление к eme должно быть сделано вне цикл включен eme - в противном случае выдается исключение ConcurrentModificationException.


Совет

Также можно написать:

List<Employee> eme = new ArrayList<>();

Или используйте набор:

Set<Employee> eme = new TreeSet<>(Comparator.comparingLong(Employee::getEmpId));

if (!eme.add(emp)) {
    throw new AlreadyExistsException();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...