Как я должен делить нулевое исключение на Java без фактического деления на ноль?

У меня есть устройство I2C, которое хочет два входа: знаменатель и числитель. Оба записываются в отдельные адреса, поэтому фактический расчет (numerator/denominator) не выполняется. Проблема заключается в том, что на устройстве I2C может произойти деление на ноль, поэтому необходимо проверить деление на нулевую ошибку. В идеале, то же самое произойдет, если деление было выполнено с помощью java-кода.

В настоящий момент я использовал неиспользуемую переменную, которая выполняет разделение, но я волнуюсь, что она будет оптимизирована:

public void setKp(int numerator, int divisor)
{
    int zeroCheck = numerator / divisor;
    //... doesn't use zeroCheck
}

Конечно, лучший способ!

Ответы

Ответ 1

Вы не должны бросать исключение ArithmeticException. Поскольку ошибка указана в аргументах, введите IllegalArgumentException. Поскольку документация говорит:

Брошенный, чтобы указать, что метод был передан незаконным или несоответствующим аргументом.

Это именно то, что происходит здесь.

if (divisor == 0) {
    throw new IllegalArgumentException("Argument 'divisor' is 0");
}

Ответ 2

Сделайте это:

if (denominator == 0) throw new ArithmeticException("denominator == 0");

ArithmeticException - это исключение, которое обычно генерируется при делении на 0.

Ответ 3

public class ZeroDivisionException extends ArithmeticException {
    // ...
}

if (denominator == 0) {
    throw new ZeroDivisionException();
}

Ответ 4

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

Определить настраиваемое исключение

public class DivideByZeroException() extends ArithmeticException {
}

Затем в вашем коде вы должны проверить деление на ноль и выбросить это исключение:

if (divisor == 0) throw new DivideByZeroException();

Throw ArithmeticException

Добавьте в свой код проверку деления на ноль и выполните арифметическое исключение:

if (divisor == 0) throw new java.lang.ArithmeticException("/ by zero");

Кроме того, вы могли бы рассмотреть возможность исключения недопустимого аргумента, поскольку делитель нуля является неправильным аргументом для перехода к вашему методу setKp():

if (divisor == 0) throw new java.lang.IllegalArgumentException("divisor == 0");

Ответ 5

Что-то вроде:

if(divisor == 0) {
  throw new ArithmeticException("Division by zero!");
}