0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java】 特定の数値を除いた乱数を取得する方法

Last updated at Posted at 2020-09-12

9/13 更新

以前書いたコードを改善しました。改善点としては

  • ListではなくSetを使用し、リトライ回数を減らしたこと
  • 除外したい数値をString型ではなくInterger型にしたこと
main.java
import java.util.Random;
import java.util.HashSet;

public class Main {
 
    public static void main(String[] args) {
        Random rand = new Random();
        int i;
        // 除外したい数値を格納する
        Set exSet = new HashSet();
        exList.add(2);
	    exList.add(5);
	    exList.add(8);
		
		do {
			i = Interger.valueOf(rand.nextInt(10)+1); // 1~10までの乱数を生成し文字列に変換
		} while (exSet.contains(i)); //除外リストのいずれかの数値と一致なら繰り返す
		System.out.println(i);
    }
}

こちらが改善前のコード

main.java
import java.util.ArrayList;
import java.util.Random;

public class Main {
 
    public static void main(String[] args) {
        Random rand = new Random();
        String i;
        // 除外したい数値を格納する
        List<String> exList = new ArrayList<String>();
        exList.add("2");
		exList.add("5");
		exList.add("8");
		
		do {
			i = String.valueOf(rand.nextInt(10)+1); // 1~10までの乱数を生成し文字列に変換
		} while (exList.contains(i)); //除外リストのいずれかの数値と一致なら繰り返す
		System.out.println(i);
    }
}

海外でのQAサイトで見つけた特定の数値を除いた乱数を除外する方法も見つけたが
参考までに載せておきます。

public int getRandomWithExclusion(Random rnd, int start, int end, int... exclude) {
    int random = start + rnd.nextInt(end - start + 1 - exclude.length);
    for (int ex : exclude) {
        if (random < ex) {
            break;
        }
        random++;
    }
    return random;
}
main.java
int[] ex = { 2, 5, 6 };
val = getRandomWithExclusion(rnd, 1, 10, ex)
// 5,6,7の乱数を発生させた場合、7の値を取得するため、7のみ発生頻度が高くなってしまう
0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?