概要
みなさんこんにちはcandleです。今回はprocessingで重複しないランダムな数を配列で取得する関数を作成したいとおもいます。
前提
なし
関数を作成する
以下のような関数を作成します。
int[] get_no_dup_numbers(int number){ IntList nums = new IntList(number); for (int i = 0; i < number; i++){ nums.append(i); }; nums.shuffle(); int[] result = nums.array(); return result; }
まず、ge_no_dup_numbersは引数として生成するランダムな数を指定します。返り値はintの配列です。
次に受け取った数だけの大きさを持つIntListを作成し、for文で引数で指定した数だけループを回し、iをIntListに加えていきます。例えば、引数が4ならnumsには0から3の数が入ります。
nums.shuffle関数で順番をバラバラにします。int配列のresultにIntListをarrayに変換したものを代入して、それを返します。
実際に使ってみる
適当なprocessingのコードを作成して、先ほどのge_no_dup_numbers関数の下に以下を記述します。
void setup() { size(400, 400); int[] num = get_no_dup_numbers(5); println(num); } void draw() { }
実行してみましょう。
コンソールに以下のように表示されます。
うまくいきましたね。
任意の数から任意の数までの重複しないランダムな数を取得する
先ほどは0から任意の数までのランダムな数を取得しましたが、今度は任意の数から任意の数までの重複しないランダムな数字を取得してみたいと思います。
int[] get_no_dup_order_numbers(int start_num, int end_num) { int num_size = (end_num+1) - start_num; IntList nums = new IntList(num_size); for (int i = start_num; i <= end_num; i++) { nums.append(i); }; nums.shuffle(); int[] result = nums.array(); return result; }
基本は同じですが、start_numとend_numを与えることで、その範囲の重複しない乱数を取得できます。
実際に使ってみましょう。
void setup() { size(400, 400); int[] num = get_no_dup_order_numbers(5, 10); println(num); } void draw() { }
まとめ
これで、ランダムな数を取得できますね。