我当前正在使用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可能不是最好的主意。