回答編集履歴

3

修正

2020/10/20 01:44

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -39,6 +39,14 @@
39
39
  今回のケースでは、coはp1.coを、poly.coはp3.coを指しますから、混在していたわけです。
40
40
 
41
41
  staticメソッドにしておけばこのようなミスは防げます。
42
+
43
+
44
+
45
+ **追記**:
46
+
47
+ コメントでswordoneさんがご指摘のとおり、
48
+
49
+ 引数polyを受け取らない非staticメソッドの方がJava的には自然かもしれません。
42
50
 
43
51
 
44
52
 

2

追記

2020/10/20 01:43

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -39,3 +39,75 @@
39
39
  今回のケースでは、coはp1.coを、poly.coはp3.coを指しますから、混在していたわけです。
40
40
 
41
41
  staticメソッドにしておけばこのようなミスは防げます。
42
+
43
+
44
+
45
+ アドバイス
46
+
47
+ ---
48
+
49
+ 簡単にでもコメントを書きましょう。
50
+
51
+ 第三者(あるいは未来のあなた)にとって読み易くなるだけでなく、思考の整理になります。
52
+
53
+
54
+
55
+ 例えば次のように。(若干さぼっている部分もあります)
56
+
57
+ ```Java
58
+
59
+ /**
60
+
61
+ * 各項の次数を一律に増やし、新しいオブジェクトを作って返す。
62
+
63
+ * Polynomial.getShifted(2x^2 + 3x, 2) => 2x^4 + 3x^2
64
+
65
+ *
66
+
67
+ * @param num シフト幅。正の数もしくは0。
68
+
69
+ */
70
+
71
+ private static Polynomial getShifted(Polynomial poly, int num) {
72
+
73
+ if (num < 1) {
74
+
75
+ // シフトの必要が無いとき
76
+
77
+ return poly;
78
+
79
+ }
80
+
81
+
82
+
83
+ // 新しい多項式オブジェクト
84
+
85
+ int dim = poly.co.length + num;
86
+
87
+ int[] shiftedCo = new int[dim];
88
+
89
+
90
+
91
+ // num分だけずらして係数を代入する
92
+
93
+ for (int i = 0; i < poly.co.length; i++) {
94
+
95
+ shiftedCo[i + num] = poly.co[i];
96
+
97
+ }
98
+
99
+ // 余った領域は0で埋める
100
+
101
+ for (int i = 0; i < num; i++) {
102
+
103
+ shiftedCo[i] = 0; // なおJavaの場合この処理は不要です。最初から要素の初期値が0なので。
104
+
105
+ }
106
+
107
+
108
+
109
+ return new Polynomial(shiftedCo);
110
+
111
+ }
112
+
113
+ ```

1

追記

2020/10/20 01:05

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -36,4 +36,6 @@
36
36
 
37
37
 
38
38
 
39
+ 今回のケースでは、coはp1.coを、poly.coはp3.coを指しますから、混在していたわけです。
40
+
39
41
  staticメソッドにしておけばこのようなミスは防げます。