Повторение исключения в Java - PullRequest
1 голос
/ 15 октября 2019

У меня такая проблема. У меня есть ArrayList «Пассажиры в автомобиле» (класс).

 public ArrayList<Man> passengers = new ArrayList<Man>(capacity);

Объем этого автомобиля ограничен, поэтому я хочу создать исключение: когда пользователь хочет добавить пассажиров, он получает исключение, эта машина заполнена и для удаления лишнего объекта из ArrayList.

try {
    mercedes.passengers.add(vova);
    mercedes.passengers.add(vova);
    mercedes.passengers.add(vova);
    mercedes.passengers.add(vova);
    mercedes.passengers.add(vova);
    mercedes.passengers.add(vova);
    mercedes.passengers.add(vova);
    if (mercedes.passengers.size() > mercedes.get_capacity()) {
        mercedes.passengers.remove(mercedes.get_capacity());
        throw new Exception("There cannot be more passengers, than allowed");
    }
}
catch(Exception ex){
    System.out.println(ex.getMessage());
}

Проблема в том, что он работает только один раз, даже если я пытаюсь использовать цикл for. Что я должен делать?

Ответы [ 5 ]

3 голосов
/ 15 октября 2019

Создайте метод addPassenger для класса Car, который выполняет проверку за вас:

public void addPassenger(Man m) {
  if(passengers.size() >= get_capacity()) {
    throw new Exception("There cannot be more passengers than allowed");
  }
  passengers.add(m);
}

Теперь используйте этот метод вместо mercedes.passengers.add(vova); строк.

1 голос
/ 15 октября 2019

Попробуйте что-то вроде этого

public class ValidationList<T> extends ArrayList<T> {

    private final Integer maxCapacity;

    public ValidationList (Integer maxCapacity) {
        super(maxCapacity);
        this.maxCapacity = maxCapacity;
    }

    @Override
    public boolean add (T t) {
        if (size() == maxCapacity) {
            throw new RuntimeException("There cannot be more passengers than allowed");
        }
        return super.add(t);
    }
}

В этом случае вы переопределяете реализацию ArrayList и перед каждым добавлением проверяет, заполнен ли ваш автомобиль или нет.

1 голос
/ 15 октября 2019

Вы должны отступить здесь.

Дело в том, что вы либо используете стандартный список, тогда у вас нет такой проверки в нужном месте . (Как ваш текущий пример).

Вы видите, что ООП нужно сделать: вы хотите, чтобы вызов add() выбрасывал это исключение!

Этого можно добиться, создав собственную собственную реализацию интерфейса List, например, расширение ArrayList. И затем вы просто гарантируете, что ваш add() метод проверяет текущий размер до добавления нового члена.

Вы определенно хотите избежать развязки добавление элементов и проверка, как в вашем примере.

0 голосов
/ 15 октября 2019

@ Han4o

Пожалуйста, проверьте ниже блок:

public void addPassenger(Man m) {
    if(passengers.size() == get_capacity()) {
        throw new Exception("There cannot be more passengers than allowed");
    } else {
        passengers.add(m);
    }
}

Теперь, если вы хотите напечатать сообщение об исключении, используйте ниже в блоке кода catch изгде вы вызвали этот метод addPassenger:

System.out.println(e.getMessage());
0 голосов
/ 15 октября 2019

Спасибо f1sh за ответ, я только что отредактировал его для себя, так что теперь он работает, как я и предлагал.

public void addPassenger(Man m) {
            if(passengers.size() >= get_capacity()) {
                try {
                    passengers.remove(m);
                    throw new Exception("Too much passengers");
                }
                catch (Exception e) {
                    System.out.println("There cannot be more passengers than allowed");
                }
            }
            passengers.add(m);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...