質問: n1 {return fal`se} else {return true} } ``` 最後のところでfalseならもう一度RandomNumber()からやり直しで、trueならこれを抜けるというようなやり方はございませんか? それか、もし他にいいやり方がありましたら教えていただきたいです。
回答: hit&blowの出題値を生成するために、breakNumberという関数を作って同じ数字を含まない4桁の数字を生成したいが、このコーディングをどう修正するとうまく処理できるかという質問なのですよね? まず、4桁の数字というのが1000-9999の範囲でいいんでしょうか? 0123とかを出題値とする必要はないんですか? 次に、4桁の数字といっても別に足し算/引き算するわけではありませんから、UInt32で扱う必要はありません。 今回扱う4桁の数字は、桁ごとに一致しているかしていないかを調べるのが主な処理になると思いますので、UInt32で扱うのではなく、0-9の数字4個で構成される配列として定義した方が後でいろいろ処理しやすいと思います。 そして、同じ数字を持たない4個の数字を生成する方法ですが、以下のように処理するのが、無駄な重複リトライをしなくてすむのでスマートだと思います。 1. まず、0-9までの数字が順番に入っている10個の要素を持つ配列(numbers)を作成します。 2. 0-9の範囲のランダム値(r)を取得します。 3. numbersのr番目の要素を1個目の数字とし、その要素をnumbersから削除します。(残る要素数は9個です) 4. 0-8の範囲のランダム値(r)を取得します。 5. numbersのr番目の要素を2個目の数字とし、その要素をnumbersから削除します。(残る要素数は8個です) 6. 0-7の範囲のランダム値(r)を取得します。 7. numbersのr番目の要素を3個目の数字とし、その要素をnumbersから削除します。(残る要素数は7個です) 8. 0-6の範囲のランダム値(r)を取得します。 9. numbersのr番目の要素を4個目の数字とします。 数字を4個取り出せばいいだけなので、わかりやすいよう1個ずつ順番に全部書きましたが、やりたいことがわかれば4回ループで処理すれば簡潔に記述できます。