我当前正在使用Java的RNG Random r = new Random(),并使其在while循环中生成介于0和5之间的新整数。

while (someBoolean == false) {
        int i = r.nextInt(6);
           ....
 }

我想做的是从范围中删除一个数字(例如4),以便RNG仍然生成一个介于0到5之间的新数字,但其中一个值除外。

我目前的最佳选择是:
 while (someBoolean == false) {
        int i = r.nextInt(6);
           if (i == removedInt) { continue; }
          ....
 }

但是我担心这可能会导致代码长期运行,因为RNG会不断返回我不想要的数字。

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

任何帮助表示赞赏:)

最佳答案

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

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

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

07-25 20:18