umiwataringringring

私がไคโตะだ

Javeで重複しない乱数の生成いろいろを投げやりに。

知ってる人がたくさんいそうなお話。

Javaで初歩的な乱数と言ったらこれ。

import java.util.Random;
Public class Random1(){
   public static void main(String[] args) {
      Random rnd = new Random();
      int value = rnd.nextInt();
   }
}

ご丁寧に書いているけどまあ自己学習なので。

で、これを何回かぶん回してみると...

import java.util.Random;
Public class Random1(){
   public static void main(String[] args) {
      Random rnd = new Random();
      int value;
      for(int i=0; i<10; i++){
         value = rnd.nextInt();
         System.out.println(value);
      }
   }
}

当然、10個の乱数が出力される。

0
5
6
2
8
8
4
1
8
3

で、1回の実行の間に同じ数字を出力したくないとき、 つまり、重複しない乱数を生成したいとき、 つまり、非反復の乱数を生成したいとき(どれも同じ)

やり方はいろいろあるわけで、例えばこれ↓のように既出の数を除外したり、

codeday.me

これ↓のようにフラグを立てたり、

qiita.com

これ↓とか、

blog.livedoor.jp

一番マシだと思うのは、配列作って要素番号をシャッフルすればいい。

既出のことなので先人のブログでもみてくだしあ。

regry358.hatenablog.com

Javaなら Collections.shuffle() がある。