Обработать Infinity при делении на ноль java

359
02 апреля 2018, 23:54

Подскажите где ошибка? Не получается обработать деление на ноль.

     public class Calculator_OOP {
    public static void main(String[] args) {
        CalculatorLogic calclogic = new CalculatorLogic();
        Calculator calc = new Calculator(calclogic);
        calc.exec();
    }
}
interface Operation {
    double exec(double first_value, double second_value);
}
class Addition implements Operation {
    public double exec(double first_value, double second_value) {
        return (first_value + second_value);
    }
}
class Subtraction implements Operation {
    public double exec(double first_value, double second_value) {
        return (first_value - second_value);
    }
}
class Multiply implements Operation {
    public double exec(double first_value, double second_value) {
        return (first_value * second_value);
    }
}
class Division implements Operation {
    public double exec(double first_value, double second_value) {
 if (second_value==0) {
     throw new DivisionByZero();
 }
        return (first_value / second_value);
    }
}
interface Operations {
    Operation getOper(char op);
}
class CalculatorLogic implements Operations {
    char resOperation;
    public Operation operation;
    public Operation getOper(char op) {
            this.resOperation = op;
            switch (resOperation) {
                case '+': {
                    operation = new Addition();
                    break;
                }
                case '-': {
                    operation = new Subtraction();
                    break;
                }
                case '*': {
                    operation = new Multiply();
                    break;
                }
                case '/': {
                    operation = new Division();
                    break;
                }
                default:
            }
        return operation;
    }
}
class Calculator {
    CalculatorLogic resultOperation;
    public Calculator(CalculatorLogic resultOperation) {
        this.resultOperation = resultOperation;
    }
    public void exec() {
        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println("Введите первое число и нажмите Enter");
            double num1 = scanner.nextDouble();
            System.out.println("Выберите операцию: +, -, *, / и нажмите Enter");
            char operation = scanner.next().trim().charAt(0);
            System.out.println("Введите второе число и нажмите Enter");
            double num2 = scanner.nextDouble();
            Operation op = resultOperation.getOper(operation);
            if (op != null) System.out.println("Ответ: " + op.exec(num1, num2));
            else System.out.println("Error: Не верная операция!");
        } catch (Exception e) {
            System.out.println("Ошибка: Не верное значение!");
        }
    }
    public class DivisionByZero extends Exception {}
Answer 1

Попробуйте так. Проблема в том, что Вы в своем старом коде не обрабатывали генерируемое исключение DivisionByZero(кстати, лучше класс исключений называть DivisionByZeroException, чтобы не отходить от именных конвенций). А то что Вы написали в комментарии - означает что компилятор не видит этот класс DivisionByZero, где его код? Можете не писать свой класс, а использовать ArithmeticException, тогда

     class Division implements Operation {
       public double exec(double first_value, double second_value) {
         if (second_value==0) {
           throw new ArithmeticException("На ноль делить нельзя");
         }
         return (first_value / second_value);
        }
      }


   try {
        System.out.println("Введите первое число и нажмите Enter");
        double num1 = scanner.nextDouble();
        System.out.println("Выберите операцию: +, -, *, / и нажмите Enter");
        char operation = scanner.next().trim().charAt(0);
        System.out.println("Введите второе число и нажмите Enter");
        double num2 = scanner.nextDouble();
        Operation op = resultOperation.getOper(operation);
        try {
          if (op != null) System.out.println("Ответ: " + op.exec(num1, num2));
          else System.out.println("Error: Не верная операция!");
        } catch (ArithmeticException ex) {
          ex.printStackTrace();
        }
    } catch (Exception e) {
        System.out.println("Ошибка: Не верное значение!");
    }
READ ALSO
JavaFx, Зум “рисунка” в canvas

JavaFx, Зум “рисунка” в canvas

Есть такой код для canvas, что бы при прокрутке колесиком мышки, можно было увеличивать или уменьшать содержание canvasНо есть одно но, при увеличении...

321
Java проблема парсинга даты

Java проблема парсинга даты

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

339
проблемы с реализацией LinkedList [требует правки]

проблемы с реализацией LinkedList [требует правки]

Нужно получить значение 3 в результате выполнения следующего кода: Systemout

214
AndroidStudio не работает(Windows)

AndroidStudio не работает(Windows)

Доброго времени суток!Я установил андроид студио и ява,но установить сдк не получается точнее интегрировать его в андроид сдкЯ нажимаю установить,он...

260