Java - 如何从值数组中创建随机数

时间:2012-10-30 18:49:00

标签: java random

在第一次迭代时 - 我想从0..10

创建一个随机数

这就是我实现它的方式 -

 int generator= (int)(Math.random() * (10));

在第一次迭代中,我想创建另一个随机数,但没有其中一个值。 例如,我想要没有数字4的随机数。 只有1,2,3,5,6,7,8,9,0

当我生成随机数时,如何从数字0..10中删除其中一个值?

7 个答案:

答案 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

第二种方式: -

更好的方法是从列表的0size生成一个随机数,并获取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循环应该处理它。