-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCalculatorApplication.java
More file actions
64 lines (53 loc) · 1.86 KB
/
CalculatorApplication.java
File metadata and controls
64 lines (53 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import domain.calculator.Calculator;
import domain.calculator.exception.InvalidInputException;
import domain.expression.operator.exception.DivideByZeroException;
import ui.printer.ConsolePrinter;
import ui.printer.Printer;
import ui.receiver.ConsoleReceiver;
import ui.receiver.Receiver;
import java.util.Optional;
public class CalculatorApplication {
private static final boolean CONTINUE_PROGRAM = true;
private static final String EXIT_REQUEST = "exit";
private Printer printer;
private Receiver receiver;
private Calculator calculator;
public CalculatorApplication() {
printer = new ConsolePrinter();
receiver = new ConsoleReceiver();
calculator = new Calculator();
}
public void run() {
printer.greet();
while (CONTINUE_PROGRAM) {
printer.printWaitingForInputText();
String expression = receiver.receiveExpression();
if (expression.equalsIgnoreCase(EXIT_REQUEST)) {
break ;
}
Optional<Integer> optionalResult = calculateExpression(expression);
if (optionalResult.isEmpty()) {
continue ;
}
int result = optionalResult.get();
printer.printResult(result);
}
}
private Optional<Integer> calculateExpression(String expression) {
Integer result;
try {
result = calculator.calculate(expression);
} catch (DivideByZeroException e) {
System.out.println(e.getMessage());
return Optional.empty();
} catch (InvalidInputException e) {
System.out.println(e.getMessage());
return Optional.empty();
}
return Optional.of(result);
}
public static void main(String[] args) {
CalculatorApplication app = new CalculatorApplication();
app.run();
}
}