-1

これは私のコードです:

secretPointX = (arc4random() % 600) + 400;
secretPointY = (arc4random() % 350) + 250;

これらを座標として使用し、ピタゴラスの定理を使用して円の半径に使用します。私の問題は、400〜600から250〜350の範囲の乱数が生成されないことです。指定された範囲外の数値を生成します。なにが問題ですか?

4

2 に答える 2

4

モジュロ除算により、演算の残りが得られます。簡単に言えば、このように使用すると、0 から右側のオペランドより 1 少ない数値が得られます。599 までの数字を取得し、それを 400 に追加します。

あなたはこれをしているはずです:

u_int32_t max = 600;
u_int32_t min = 400;
u_int32_t result = (arc4random % (max - min) + 1) + min;

または、より良い、

arc4random_uniform(max - min + 1) + min;
于 2013-03-02T18:28:54.770 に答える
3

ゼロ(含む)から600(除く)までの乱数を生成し、それに400を追加します。その結果、当然、400から999の間の数値になります。代わりに次のようなものを使用してください。

secretPointX = (arc4random() % 201) + 400;

arc4random_uniform(201)モジュロ演算を実行せずに、0から200までの乱数を取得するために使用することもできます。

于 2013-03-02T18:26:04.247 に答える