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

回答編集履歴

2

kの個数について補足

2017/11/30 06:53

投稿

Udomomo
Udomomo

スコア1524

answer CHANGED
@@ -8,8 +8,8 @@
8
8
  1:空の配列kを用意
9
9
  2:ランダムな数字pを1つ生成する
10
10
  3:既に配列kに入っている要素をそれぞれpと比較
11
- 4:pと同じ数字がkに入っていなければ、pをkに加える
11
+ 4:pと同じ数字がkに入っていなければ、pをkに加える(この結果、kの要素の個数が1個増える)
12
- 5:上記の2-4をループさせ、kの個数が一定以上になったら終了
12
+ 5:上記の2-4をループさせ、kの要素の個数が一定以上になったら終了
13
13
 
14
14
  などがありえます。
15
15
  3の処理では、別のループを回してもよいですが、`indexOf`を使う方法などもあります。

1

処理の順番を修正

2017/11/30 06:52

投稿

Udomomo
Udomomo

スコア1524

answer CHANGED
@@ -1,14 +1,15 @@
1
1
  `for in`文の中で使う要素(この場合は`l`)は定数です。これはSwiftの仕様です。
2
2
  `for l in a`は、ループが1周回るたびに、`l`の値が`a[0]`, `a[1]`...と変化していくものです。もし`l`の値を勝手に変えることができると、配列`a`の中にない値にすることもでき、不具合の温床になってしまいます。
3
- (今回の場合は、aは0から9までの整数が入った配列と考えてください)
3
+ (今回の場合は、`a`は0から9までの整数が入った配列と考えてください)
4
4
 
5
5
  質問のコードは、`for in`文の中で`l`の値を変えなければ成立しないような処理になっています。エラーを解消するには、何をループさせるかを大きく考え直さなければいけません。
6
6
 
7
7
  例えば、
8
+ 1:空の配列kを用意
8
- 1:ランダムな数字pを1つ生成する
9
+ 2:ランダムな数字pを1つ生成する
9
- 2:既に配列kに入っている要素をそれぞれpと比較
10
+ 3:既に配列kに入っている要素をそれぞれpと比較
10
- 3:pと同じ数字がkに入っていなければ、pをkに加える
11
+ 4:pと同じ数字がkに入っていなければ、pをkに加える
11
- 4:上記の1-3をループさせ、kの個数が一定以上になったら終了
12
+ 5:上記の2-4をループさせ、kの個数が一定以上になったら終了
12
13
 
13
14
  などがありえます。
14
- 2の処理では、別のループを回してもよいですが、`indexOf`を使う方法などもあります。
15
+ 3の処理では、別のループを回してもよいですが、`indexOf`を使う方法などもあります。