0

可能重复:
非重复随机数数组

我有一个包含许多元素的字符串数组(因为我还没有完成应用程序,我不知道确切的数字),大概是 200 个。我想得到这个数组的 20 个随机元素,但要确定每个随机元素只出现一次,例如,我不想在这 20 个元素中加入第 5 个元素(例如)两次。我怎样才能做到这一点?

4

3 回答 3

1

我假设它是Java。
如果这是正确的,您可以执行以下操作:

public void getRandomElementsOfArray(String[] array)
{
    int maxLength = 200; // Insert length of your array
    int[] usedRandoms;
    String[] randomElements = String[20];
    int random = new Random().nextInt();

    for(int i = 0; i<21; i++) // Loops are NOT my strongest point. you'd better check this
    {
        while(random > maxLength || random < 0 || !Arrays.asList(usedRandoms).contains(random)) // Loop while random is smaller then 0 (the smallest index) or bigger then the length of your array or already used
        {
            random = new Random();
        }


        randomElements[i] = array[random];
        usedRandoms[i] = random;
    }
}
于 2012-04-09T12:09:03.793 回答
0

我建议你遵循一个相当直接的策略。您需要一个已经选择的集合元素 - 在您的情况下,HashSet 可能是合适的,给定 X 的字符串数组大小:

  • 选择 0 到 X-1 之间的元素
  • 检查它是否在 Selected set 中,如果是则重新开始
  • 将其添加到选定集
  • 如果你选择了足够多的元素突破,否则重新开始
于 2012-04-09T12:12:11.980 回答
0

找到下面的代码生成随机数

/** Generate 10 random integers in the range 0..99. */
public final class RandomInteger {

public static final void main(String... aArgs){
log("Generating 10 random integers in range 0..99.");

//note a single Random object is reused here
Random randomGenerator = new Random();
for (int idx = 1; idx <= 10; ++idx){
  int randomInt = randomGenerator.nextInt(100);
  log("Generated : " + randomInt);
}

log("Done.");
}

 private static void log(String aMessage){
System.out.println(aMessage);
}
}
于 2012-04-09T12:13:06.673 回答