69 lines
2.1 KiB
Java
69 lines
2.1 KiB
Java
package model;
|
|
|
|
public class Calculator {
|
|
|
|
public static String execute(String[] params) {
|
|
String operator = params[0];
|
|
double value1;
|
|
double value2;
|
|
// todo: доработать код, чтобы все негативные тесты проходили успешно
|
|
//value1 = Double.parseDouble(params[1]);
|
|
//value2 = Double.parseDouble(params[2]);
|
|
value1 = validDouble(params[1]);
|
|
value2 = validDouble(params[2]);
|
|
double result = calculate(operator, value1, value2);
|
|
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
|
|
throw new CalculatorException("Превышен порог значений");
|
|
}
|
|
return String.valueOf(result);
|
|
}
|
|
|
|
private static double calculate(String operator, double a, double b) {
|
|
if (operator == null) {
|
|
throw new CalculatorException("Оператор не может быть null");
|
|
}
|
|
switch (operator) {
|
|
case "+":
|
|
return add(a, b);
|
|
case "-":
|
|
return subst(a, b);
|
|
case "*":
|
|
return mult(a, b);
|
|
case "/":
|
|
return div(a, b);
|
|
}
|
|
throw new CalculatorException("Неизвестный оператор");
|
|
}
|
|
|
|
private static double add(double a, double b) {
|
|
return a + b;
|
|
}
|
|
|
|
private static double subst(double a, double b) {
|
|
return a - b;
|
|
}
|
|
|
|
private static double div(double a, double b) {
|
|
if (b == 0) {
|
|
throw new CalculatorException();
|
|
}
|
|
return a / b;
|
|
}
|
|
|
|
private static double mult(double a, double b) {
|
|
return a * b;
|
|
}
|
|
|
|
private static double validDouble (String number) throws CalculatorException{
|
|
if (number == null) {
|
|
throw new CalculatorException("Число не может быть null");
|
|
}
|
|
try{
|
|
return Double.parseDouble(number);
|
|
}
|
|
catch (NumberFormatException e){
|
|
throw new CalculatorException("Некорректное число: " + number, e);
|
|
}
|
|
}
|
|
}
|