回答編集履歴

1

列挙

2016/05/10 02:29

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -7,3 +7,101 @@
7
7
 
8
8
 
9
9
  "ce"の入力に対しては現在のmsgの状態などから戻る状態を判断してループの最初に戻すくらいなのでは?
10
+
11
+
12
+
13
+ 私だったら演算子の列挙型を作ってしまいたくなります。
14
+
15
+ ```java
16
+
17
+ //
18
+
19
+ enum Operator {
20
+
21
+ PLUS {
22
+
23
+ @Override
24
+
25
+ public BigDecimal calculate(String num1, String num2) {
26
+
27
+ return new BigDecimal(num1).add(new BigDecimal(num2));
28
+
29
+ }
30
+
31
+ },
32
+
33
+ MINUS {
34
+
35
+ @Override
36
+
37
+ public BigDecimal calculate(String num1, String num2) {
38
+
39
+ return new BigDecimal(num1).subtract(new BigDecimal(num2));
40
+
41
+ }
42
+
43
+ },
44
+
45
+ MULTIPLY {
46
+
47
+ @Override
48
+
49
+ public BigDecimal calculate(String num1, String num2) {
50
+
51
+ return new BigDecimal(num1).multiply(new BigDecimal(num2));
52
+
53
+ }
54
+
55
+ },
56
+
57
+ DIVIDE {
58
+
59
+ @Override
60
+
61
+ public BigDecimal calculate(String num1, String num2) {
62
+
63
+ return new BigDecimal(num1).divide(new BigDecimal(num2), 20, BigDecimal.ROUND_HALF_UP);
64
+
65
+ }
66
+
67
+ };
68
+
69
+
70
+
71
+ abstract public BigDecimal calculate(String num1, String num2);
72
+
73
+
74
+
75
+ public static Operator of(String operator) {
76
+
77
+ switch (operator) {
78
+
79
+ case "+":
80
+
81
+ return PLUS;
82
+
83
+ case "-":
84
+
85
+ return MINUS;
86
+
87
+ case "*":
88
+
89
+ return MULTIPLY;
90
+
91
+ case "/":
92
+
93
+ return DIVIDE;
94
+
95
+
96
+
97
+ default:
98
+
99
+ throw new IllegalArgumentException("演算子でありません。");
100
+
101
+ }
102
+
103
+ }
104
+
105
+ }
106
+
107
+ ```