Как я должен делить нулевое исключение на 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!");
}