从Java RNG的范围中删除数字?

Jon*_*nyH 6 java random numbers generator

我目前正在使用Java的RNG Random r = new Random(),并在while循环中生成0到5之间的新整数.

while (someBoolean == false) {
        int i = r.nextInt(6);
           ....
 }
Run Code Online (Sandbox Code Playgroud)

我想要做的是从范围中删除一个数字(例如,4),以便RNG仍然生成0到5之间的新数字,不包括其中一个值.

我目前最好的选择是:

 while (someBoolean == false) {
        int i = r.nextInt(6);
           if (i == removedInt) { continue; }
          ....
 }
Run Code Online (Sandbox Code Playgroud)

但是我担心这可能导致我的代码长时间运行,其中RNG不断返回我不想要的数字.

[ 为清楚起见; 返回的数字是Connect4网格或2D int数组中的列.该方法是随机地将列移动到列中,直到列填满为止,此时我不再希望能够在该列中播放.]

任何帮助赞赏:)

Ger*_*ino 3

ArrayList<Integer> myInts = new ArrayList<Integer>();
myInts.add(1);
myInts.add(2);
myInts.add(3);
myInts.add(4);
int i = myInts.get(r.nextInt(myInts.size())); // 1,2,3,4
myInts.remove(3);
int j = myInts.get(r.nextInt(myInts.size())); // 1,2,4
Run Code Online (Sandbox Code Playgroud)

该代码从允许的整数列表中选择随机条目。

PS 请注意,如果您有很大的数字范围,那么创建一个包含数千个整数的 ArrayList 可能不是最好的主意。