在第一次迭代时 - 我想从0..10
创建一个随机数这就是我实现它的方式 -
int generator= (int)(Math.random() * (10));
在第一次迭代中,我想创建另一个随机数,但没有其中一个值。 例如,我想要没有数字4的随机数。 只有1,2,3,5,6,7,8,9,0
当我生成随机数时,如何从数字0..10中删除其中一个值?
答案 0 :(得分:5)
您还可以保留所有数字的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
中删除该列表中的所有元素。然后使用上述任何方法。
答案 1 :(得分:1)
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
因为我们想要增加一个
答案 2 :(得分:1)
int generator= (int)(Math.random() * (10));
if (generator >= 4) generator++;
这将包括数字10作为可能的结果,如果你不想要这个,乘以9而不是10。
答案 3 :(得分:1)
您可以将值存储在列表中,并生成从该列表中获取的随机索引。
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");
}
}
答案 4 :(得分:1)
有两种基本的有效方法:
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 - 关注Simon André's approach。
答案 5 :(得分:0)
int excluded[] = { 1,4,3};
Random r = new Random();
int generator;
do {
generator= r.nextInt(10);
} while (! Arrays.asList(excluded).contains(generator) )
答案 6 :(得分:0)
你可以做什么(也许有更简洁的方法来处理这个)是检查第二个生成的数字,看它是否与第一个相匹配,如果匹配,只需让它运行随机数。发电机再次。 一个简单的if ... else循环应该处理它。