質問するログイン新規登録

回答編集履歴

1

列挙

2016/05/10 02:29

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -2,4 +2,53 @@
2
2
  一応メインメソッド内でも「ローカルクラス」としてクラスを宣言することは可能ですが、可読性の観点などから余りおすすめしません。
3
3
  書くとしたらDentakuクラス内にstatic classとして宣言するくらいでしょうか。
4
4
 
5
- "ce"の入力に対しては現在のmsgの状態などから戻る状態を判断してループの最初に戻すくらいなのでは?
5
+ "ce"の入力に対しては現在のmsgの状態などから戻る状態を判断してループの最初に戻すくらいなのでは?
6
+
7
+ 私だったら演算子の列挙型を作ってしまいたくなります。
8
+ ```java
9
+ //
10
+ enum Operator {
11
+ PLUS {
12
+ @Override
13
+ public BigDecimal calculate(String num1, String num2) {
14
+ return new BigDecimal(num1).add(new BigDecimal(num2));
15
+ }
16
+ },
17
+ MINUS {
18
+ @Override
19
+ public BigDecimal calculate(String num1, String num2) {
20
+ return new BigDecimal(num1).subtract(new BigDecimal(num2));
21
+ }
22
+ },
23
+ MULTIPLY {
24
+ @Override
25
+ public BigDecimal calculate(String num1, String num2) {
26
+ return new BigDecimal(num1).multiply(new BigDecimal(num2));
27
+ }
28
+ },
29
+ DIVIDE {
30
+ @Override
31
+ public BigDecimal calculate(String num1, String num2) {
32
+ return new BigDecimal(num1).divide(new BigDecimal(num2), 20, BigDecimal.ROUND_HALF_UP);
33
+ }
34
+ };
35
+
36
+ abstract public BigDecimal calculate(String num1, String num2);
37
+
38
+ public static Operator of(String operator) {
39
+ switch (operator) {
40
+ case "+":
41
+ return PLUS;
42
+ case "-":
43
+ return MINUS;
44
+ case "*":
45
+ return MULTIPLY;
46
+ case "/":
47
+ return DIVIDE;
48
+
49
+ default:
50
+ throw new IllegalArgumentException("演算子でありません。");
51
+ }
52
+ }
53
+ }
54
+ ```