在第一次迭代中-我想从 0..10 创建一个随机数
这就是我实现它的方式-
int generator= (int)(Math.random() * (10));
在第一次迭代中,我想创建另一个随机数,但没有其中一个值。例如我想要没有数字 4 的随机数。只有 1,2,3,5,6,7,8,9,0
生成随机数时,如何从数字 0..10 中删除其中一个值?
您还可以维护一个List
所有的数字。然后使用Collections.shuffle
打乱列表并获取第一个元素。并删除它。
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(4);
list.add(2);
list.add(3);
System.out.println("Original List: " + list);
Collections.shuffle(list);
System.out.println("Shuffled List: " + list);
int number1 = list.remove(0); // Remove the first value
System.out.println("Number removed: " + number1);
Collections.shuffle(list);
System.out.println("Shuffled List: " + list);
number1 = list.remove(0);
System.out.println("Number removed: " + number1);
输出: -
Original List: [1, 4, 2, 3]
Shuffled List: [4, 3, 1, 2]
Number removed: 4
Shuffled List: [1, 3, 2]
Number removed: 1
更好的方法是从列表0
的 到生成一个随机数size
,并获取 的值that index
并将其删除。
int size = list.size();
Random random = new Random();
for (int i = 0; i < size; i++) {
int index = random.nextInt(list.size());
int number1 = list.remove(index);
System.out.println(number1);
}
注意: -
如果您想排除一组固定数字的生成,那么您可以将这些数字放在一个列表中。然后从您的list of numbers
. 然后使用上述任何一种方法。
Random.nextInt(10)==number
再次生成
public int generateExcept(int number) {
Random random = new Random();
int generated = 0;
while ((generated = random.nextInt(11)) == number) {
}
return generated;
}
正如OP所引用的
在第一次迭代中,我想创建另一个随机数,但没有其中一个值
如果我理解正确这是单个操作而不是重复操作。
没有再生
public static int generateExcept(int number, int max) {
Random random = new Random();
int generated = 0;
if ((generated = random.nextInt(max - 1)) == number) {
generated++;
}
return generated;
}
总是生成随机数,max-1
因为我们想加一
int generator= (int)(Math.random() * (10));
if (generator >= 4) generator++;
这将包括数字 10 作为可能的结果,如果您不想这样做,请乘以 9 而不是 10。
您可以将值存储在列表中,并生成一个随机索引以从该列表中获取。
private Random random = new Random();
private ArrayList<Integer> values = new ArrayList<Integer>();
public static int nextInt() {
if (values.size() > 0) {
return values.remove(random.nextInt(values.size()));
} else {
throw new RuntimeException("no values possible");
}
}
有两种基本的有效方法:
1 - 生成一个有效值数组(0 到 10,4 除外),并使用随机发生器在该数组上选择一个索引。一个例子如下:
Random random = new Random();
int[] unwanted = {4};
int[] values = new int[10-unwanted.length];
for(int i=0; i<10-unwanted.length; i++){
for(int curr : unwanted){
if(i == curr) continue;
}
values[i] = i;
}
int result = values[random.nextInt(10-unwanted.length)];
2 - 遵循西蒙安德烈的方法。
int excluded[] = { 1,4,3};
Random r = new Random();
int generator;
do {
generator= r.nextInt(10);
} while (! Arrays.asList(excluded).contains(generator) )
您可以做的(也许有一种更简洁的处理方式)是检查第二个生成的数字是否与第一个匹配,如果匹配,则让它运行随机数。再次生成器。一个简单的 if...else 循环应该可以解决它。