回答編集履歴

4

コード修正

2024/10/31 14:01

投稿

jimbe
jimbe

スコア13170

test CHANGED
@@ -12,10 +12,10 @@
12
12
  import java.util.*;
13
13
 
14
14
  enum Calc {
15
- PLS("+") {
15
+ ADD("+") {
16
16
  double apply(double a, double b) { return a + b; }
17
17
  },
18
- MIN("-") {
18
+ SUB("-") {
19
19
  double apply(double a, double b) { return a - b; }
20
20
  },
21
21
  MUL("*") {

3

修正

2024/10/29 17:34

投稿

jimbe
jimbe

スコア13170

test CHANGED
@@ -7,6 +7,7 @@
7
7
  Calc の operation と UI の選択番号とが正しく対応することをプログラミングレベルで確認できるようにしたくはなりますね。
8
8
 
9
9
  *私なら* 2値と演算子を纏めてクラスにするのでは無く(今の所,値を保存する必要が見当たりませんので) 演算子部分だけを enum にします。
10
+ これは GUI で電卓を作る時にも良くやります。
10
11
  ```java
11
12
  import java.util.*;
12
13
 

2

修正

2024/10/29 17:31

投稿

jimbe
jimbe

スコア13170

test CHANGED
@@ -1,5 +1,6 @@
1
1
  分割するものだと言われたから分割してみたというのでは、個人的には違和感を感じるコードです。
2
+ 分割内容は対象の状況に因って異なります。参考にされたものと質問のコードは構造に全く同じ所が無いようですので、当てはめた所でうまくは行き難いでしょう。
2
- そもそもこの (Main と Calc という2つの)クラス分けで、どのような利点が発生するのでしょうか。
3
+ 四則演算器ではこの (Main と Calc という2つの)クラス分けで、どのような利点が発生するのでしょうか。
3
4
 
4
5
  Calc クラスは何故 updateNum と calc な2つのメソッドを持っているのでしょう。 calc メソッドが A, B, operation を引数に取れば、 updateNum メソッドも Calc クラスのフィールドも不要ですよね?
5
6
 

1

コード追加

2024/10/29 17:22

投稿

jimbe
jimbe

スコア13170

test CHANGED
@@ -4,3 +4,54 @@
4
4
  Calc クラスは何故 updateNum と calc な2つのメソッドを持っているのでしょう。 calc メソッドが A, B, operation を引数に取れば、 updateNum メソッドも Calc クラスのフィールドも不要ですよね?
5
5
 
6
6
  Calc の operation と UI の選択番号とが正しく対応することをプログラミングレベルで確認できるようにしたくはなりますね。
7
+
8
+ *私なら* 2値と演算子を纏めてクラスにするのでは無く(今の所,値を保存する必要が見当たりませんので) 演算子部分だけを enum にします。
9
+ ```java
10
+ import java.util.*;
11
+
12
+ enum Calc {
13
+ PLS("+") {
14
+ double apply(double a, double b) { return a + b; }
15
+ },
16
+ MIN("-") {
17
+ double apply(double a, double b) { return a - b; }
18
+ },
19
+ MUL("*") {
20
+ double apply(double a, double b) { return a * b; }
21
+ },
22
+ DIV("/") {
23
+ double apply(double a, double b) { return b == 0 ? 0 : a / b; }
24
+ };
25
+
26
+ final String text;
27
+ Calc(String text) {
28
+ this.text = text;
29
+ }
30
+
31
+ abstract double apply(double a, double b);
32
+ }
33
+
34
+ public class Main {
35
+ public static void main(String[] args) {
36
+ Scanner scanner = new Scanner(System.in);
37
+
38
+ System.out.println(getCalcSelectText());
39
+ Calc op = Calc.values()[scanner.nextInt() - 1];
40
+
41
+ System.out.println("type number A");
42
+ float a = scanner.nextFloat();
43
+
44
+ System.out.println("type number B");
45
+ float b = scanner.nextFloat();
46
+
47
+ System.out.println("the answer is : " + op.apply(a, b));
48
+ }
49
+
50
+ private static String getCalcSelectText() {
51
+ Calc[] ops = Calc.values();
52
+ StringJoiner sj = new StringJoiner(" , ");
53
+ for(int i=0; i<ops.length; i++) sj.add((i+1) + ":" + ops[i].text);
54
+ return sj.toString();
55
+ }
56
+ }
57
+ ```