回答編集履歴
4
ループもう一つ
answer
CHANGED
@@ -15,6 +15,10 @@
|
|
15
15
|
arrOption1.get(i)で"a"を取得、arrStrに"a"追加
|
16
16
|
arrOption1 -> ["a", "b", "c", "a"] <- arrStr
|
17
17
|
|
18
|
+
i = 1
|
19
|
+
arrOption1.get(i)で"b"を取得、arrStrに"b"追加
|
20
|
+
arrOption1 -> ["a", "b", "c", "a", "b"] <- arrStr
|
21
|
+
|
18
22
|
という動作になり、以降同じような動作になります。継続条件である`i < arrOption1.size()`において、**arrOption1.size()が順次大きくなっていく**ため、いつまでたってもループから抜けることができません(※)。これが「上手く動作しない」の元凶ではないでしょうか?
|
19
23
|
|
20
24
|
(※)厳密には、ArrayList#size()はintの最大値(2^31-1)以上のサイズのリストに対して呼び出されるとintの最大値を返すので、iがそこまで到達すれば抜けることができる。
|
3
無限ループ詳細
answer
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
おそらくですが、この問題の根幹は無限ループではないでしょうか?どういう現象が起きていて困っているのかそれを一切書いてくれないので推測ですが。
|
2
|
+
```java
|
3
|
+
ArrayList<String> arrStr = arrOption1 ;
|
4
|
+
```
|
5
|
+
この代入により、変数arrStrと変数arrOption1は**同じリスト**を参照します。これがnullでない場合、
|
6
|
+
```java
|
7
|
+
for (int i = 0; i < arrOption1.size(); i++) {
|
8
|
+
arrStr.add(arrOption1.get(i));
|
9
|
+
}
|
10
|
+
```
|
11
|
+
これが実行されます(閉じ括弧が足りなかったので追加)。例えばこれらのリストが["a", "b", "c"]という内容だとすると、
|
12
|
+
|
13
|
+
i = 0
|
14
|
+
arrOption1 -> ["a", "b", "c"] <- arrStr
|
15
|
+
arrOption1.get(i)で"a"を取得、arrStrに"a"追加
|
16
|
+
arrOption1 -> ["a", "b", "c", "a"] <- arrStr
|
17
|
+
|
18
|
+
という動作になり、以降同じような動作になります。継続条件である`i < arrOption1.size()`において、**arrOption1.size()が順次大きくなっていく**ため、いつまでたってもループから抜けることができません(※)。これが「上手く動作しない」の元凶ではないでしょうか?
|
19
|
+
|
20
|
+
(※)厳密には、ArrayList#size()はintの最大値(2^31-1)以上のサイズのリストに対して呼び出されるとintの最大値を返すので、iがそこまで到達すれば抜けることができる。
|
21
|
+
###以前の回答
|
22
|
+
|
1
23
|
「なくても動くようにしたい」なら、その引数にnullを渡す方法も考えられますが、その引数なしのメソッドをオーバーロードするという手もあります。
|
2
24
|
つまり、今あるメソッドはそのままに、
|
3
25
|
```java
|
@@ -14,6 +36,3 @@
|
|
14
36
|
というメソッドを加えます。
|
15
37
|
|
16
38
|
しかし現状のメソッドには問題があり、リストを回している間、arrStrというキーに結びつくオブジェクトが上書きされ続け、最後に記録したものしか残りません。キーとなる文字列も変化させてputExtraするか、いっそArrayListごとputExtraする必要があります。
|
17
|
-
|
18
|
-
今気づきましたが、これ無限ループになりますね。
|
19
|
-
リストが持つ要素を繰り返し自分自身に加えているので、size()が際限なく増えていきます。
|
2
無限ループ
answer
CHANGED
@@ -13,4 +13,7 @@
|
|
13
13
|
```
|
14
14
|
というメソッドを加えます。
|
15
15
|
|
16
|
-
しかし現状のメソッドには問題があり、リストを回している間、arrStrというキーに結びつくオブジェクトが上書きされ続け、最後に記録したものしか残りません。キーとなる文字列も変化させてputExtraするか、いっそArrayListごとputExtraする必要があります。
|
16
|
+
しかし現状のメソッドには問題があり、リストを回している間、arrStrというキーに結びつくオブジェクトが上書きされ続け、最後に記録したものしか残りません。キーとなる文字列も変化させてputExtraするか、いっそArrayListごとputExtraする必要があります。
|
17
|
+
|
18
|
+
今気づきましたが、これ無限ループになりますね。
|
19
|
+
リストが持つ要素を繰り返し自分自身に加えているので、size()が際限なく増えていきます。
|
1
オーバーロード
answer
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
「なくても動くようにしたい」なら、その引数にnullを渡す方法も考えられますが、その引数なしのメソッドをオーバーロードするという手もあります。
|
2
|
-
つまり、今あるメソッドに
|
2
|
+
つまり、今あるメソッドはそのままに、
|
3
3
|
```java
|
4
4
|
private void changeActivity(Class targetActivity, Integer record_id) {
|
5
5
|
changeActivity(targetActivity, record_id, null, null);
|
6
6
|
}
|
7
|
+
private void changeActivity(Class targetActivity, Integer record_id, ArrayList<String> arrOption1) {
|
8
|
+
changeActivity(targetActivity, record_id, arrOption1, null);
|
9
|
+
}
|
10
|
+
private void changeActivity(Class targetActivity, Integer record_id, ArrayList<Integer> arrOption2) {
|
11
|
+
changeActivity(targetActivity, record_id, null, arrOption2);
|
12
|
+
}
|
7
13
|
```
|
8
14
|
というメソッドを加えます。
|
9
15
|
|