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

回答編集履歴

3

修正

2020/10/20 01:44

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -20,6 +20,10 @@
20
20
  今回のケースでは、coはp1.coを、poly.coはp3.coを指しますから、混在していたわけです。
21
21
  staticメソッドにしておけばこのようなミスは防げます。
22
22
 
23
+ **追記**:
24
+ コメントでswordoneさんがご指摘のとおり、
25
+ 引数polyを受け取らない非staticメソッドの方がJava的には自然かもしれません。
26
+
23
27
  アドバイス
24
28
  ---
25
29
  簡単にでもコメントを書きましょう。

2

追記

2020/10/20 01:43

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -18,4 +18,40 @@
18
18
  ```
19
19
 
20
20
  今回のケースでは、coはp1.coを、poly.coはp3.coを指しますから、混在していたわけです。
21
- staticメソッドにしておけばこのようなミスは防げます。
21
+ staticメソッドにしておけばこのようなミスは防げます。
22
+
23
+ アドバイス
24
+ ---
25
+ 簡単にでもコメントを書きましょう。
26
+ 第三者(あるいは未来のあなた)にとって読み易くなるだけでなく、思考の整理になります。
27
+
28
+ 例えば次のように。(若干さぼっている部分もあります)
29
+ ```Java
30
+ /**
31
+ * 各項の次数を一律に増やし、新しいオブジェクトを作って返す。
32
+ * Polynomial.getShifted(2x^2 + 3x, 2) => 2x^4 + 3x^2
33
+ *
34
+ * @param num シフト幅。正の数もしくは0。
35
+ */
36
+ private static Polynomial getShifted(Polynomial poly, int num) {
37
+ if (num < 1) {
38
+ // シフトの必要が無いとき
39
+ return poly;
40
+ }
41
+
42
+ // 新しい多項式オブジェクト
43
+ int dim = poly.co.length + num;
44
+ int[] shiftedCo = new int[dim];
45
+
46
+ // num分だけずらして係数を代入する
47
+ for (int i = 0; i < poly.co.length; i++) {
48
+ shiftedCo[i + num] = poly.co[i];
49
+ }
50
+ // 余った領域は0で埋める
51
+ for (int i = 0; i < num; i++) {
52
+ shiftedCo[i] = 0; // なおJavaの場合この処理は不要です。最初から要素の初期値が0なので。
53
+ }
54
+
55
+ return new Polynomial(shiftedCo);
56
+ }
57
+ ```

1

追記

2020/10/20 01:05

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -17,4 +17,5 @@
17
17
  }
18
18
  ```
19
19
 
20
+ 今回のケースでは、coはp1.coを、poly.coはp3.coを指しますから、混在していたわけです。
20
21
  staticメソッドにしておけばこのようなミスは防げます。