joppot

コピペで絶対動く。説明を妥協しない

プログラミング

processingで重複しないランダムな数を配列で取得する

投稿日:


processingrandom

概要

みなさんこんにちは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;
}

get_no_dup_numbers

まず、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() {
}

all_code

実行してみましょう。
コンソールに以下のように表示されます。
random_numbers
うまくいきましたね。

任意の数から任意の数までの重複しないランダムな数を取得する

先ほどは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() {
}

実行すると、以下のような結果を取得できます。
result_number

まとめ

これで、ランダムな数を取得できますね。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Rails pluginでengineを使ったgemの作り方[5](view helper編)

概要 みなさんこんにちはcandleです。今回はgemのview helperの作り方です。 helperというのは様はgemにすることで便利になる関数を作るとというイメージです。 よくあるのが、こん …

gemspecのsummary項目とdescription項目の違いに付いて

概要 みなさんこんにちはcandleです。 gemを自作していたら、gemspecのところでsummaryとdescriptionの違いが分からなかったので、 調べたら、公式ページに書いてあったので、 …

Mysqlのdatetime型とtimestanp型で保存されているデータを年月日だけを指定して任意の日にちのデータを取得する方法

概要 みなさんこんにちはcandleです。今日はmysqlのdatetime型とtimestanp型におさめられているデータの取得を紹介します。 datetimeやtimestanpは多くの場合下のよ …

basscss v8以降にv7以前のスタイルを追加する(自分用メモ)

概要 みなさんこんにちはcandleです。今回はbasscssのv8でかなりデフォルトのスタイルから削除されてしまったスタイルをインポートします。 v7以降からbasscssのスタイルはかなり分割され …

pythonのpipでfabricをインストールする

概要 みなさんこんにちはcandleです。今回はpipでデプロイメントツールのfabricをインストールしたいと思います。 前提 pipがインストールされている

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー