如何在java中获取不同的随机值?

时间:2012-08-01 14:07:09

标签: java

这是我的问题:我有一个整数数组,我会以随机的方式恢复20%的数组元素。 java中的函数是否具有多个随机值? 我只测试了一个值:

Random rand=new Random();
int min=0, max=10;
int valeur = rand.nextInt(max - min + 1) + min;

6 个答案:

答案 0 :(得分:2)

获取随机但不同值的最简单方法是使用shuffle。

List<Integer> list = new ArrayList<>();
for(int i = min; i <= max; i++) list.add(i);
Collections.shuffle(list);

您可以迭代list并以随机顺序获取唯一数字。

如果你想通过将你想要的数字添加到列表中,你可以使用这种方法,如果你想要的东西不超过两个,还有三个东西。

顺便说一句:这种方法对于n个数字是O(n),而生成随机数并检查它们是否已经存在O(n ^ 2 * log(n)),这要慢得多。

答案 1 :(得分:1)

如果我理解你的问题,那么你正试图获得一个“随机”阵列。如果是这样,您可以使用以下内容:

int nrOfValues = 20;
int[] values = new int[nrOfValues];
for(int i = 0; i < values.length; i++)
{
    values[i] = rand.nextInt(max - min + 1) + min;
}

如果您想获取 distinct 随机值,请尝试以下操作:

ArrayList<Integer> values = new ArrayList<Integer>();
int nrOfValues = 20;
for(int i = 0; i < values.length; i++)
{
    int value = rand.nextInt(max - min + 1) + min;
    while(values.contains(value))
        value = rand.nextInt(max - min + 1) + min;
    values.add(value);
}

当然,如果minmax选择不当,您最终可能会遇到无限循环......

答案 2 :(得分:1)

这样可以防止数字被使用两次并获得20%:

    int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    Random random = new Random();

    int numsFound = 0;
    int twentyPercent = (int)(nums.length/5F);
    List<Integer> usedIndices = new ArrayList<Integer>();
    while (numsFound < twentyPercent) {
        int index = random.nextInt(nums.length);

        if (!usedIndices.contains(index)) { // not already used?
            System.out.println(nums[index]);
            usedIndices.add(index);
            numsFound++;
        }
    }

答案 3 :(得分:0)

试试这个。

import java.util.Random;
public class Dice 
{
    public static void main(String[] args)
    {
        // Initialize Variables and Array
        Random rand = new Random();
        int[] numbers = new int[10];
        int min = 0, max = 10;


        // Input Random Number Into 10 Elements Of Array
        for (int i = 0; i < numbers.length; i++)
            numbers[i] = rand.nextInt(max - min + 1) + min;


        // Output 10 Array Cells
        for (int i = 0; i < numbers.length; i++)
            System.out.println(numbers[i]);
    }
}

答案 4 :(得分:0)

我不太明白这个问题..

从我的理解你需要这样的东西

List<Integer> listOfRandomNumbers = new ArrayList<Integer>();
//Initialize this List with required numbers

int numberOfRandomNumbersNeeded = listOfRandomNumbers/5;
int min = 0; 
int max = listOfRandomNumbers.size() - 1;

Random rand = new Random();
Set<Integer> randomNumbers = new HashSet<Integer>();
while(randomNumbers.size() < numberOfRandomNumbersNeeded) {
int value = rand.nextInt(max - min + 1) + min;
randomNumbers.add(listOfRandomNumbers.get(value));
}

System.out.println(randomNumbers);

答案 5 :(得分:0)

private Integer[] recover(double percentage, Integer[] ints) {
    int numberOfElementsToRecover = (int) (ints.length*percentage);
    List<Integer> list = Arrays.asList(ints);
    Collections.shuffle(list);
    return Arrays.copyOfRange(list.toArray(new Integer[]{}), 0, numberOfElementsToRecover);
}