【问题标题】:How can I add 100 random elements to an empty array with duplicates?如何将 100 个随机元素添加到具有重复项的空数组中?
【发布时间】:2016-09-25 18:23:19
【问题描述】:

在这段代码中,我改组了 100 个随机元素,而不是添加 100 个具有重复项的随机元素,并返回 10 个唯一键。我怎样才能做到这一点?

public static void main(String[] args) {

    ArrayList<Integer> uniqueKeys = new ArrayList<Integer>();
    for (int i = 0; i < 101; i++) {
        uniqueKeys.add(new Integer(i));
    }
    Collections.shuffle(uniqueKeys);
    for (int i = 0; i < 10; i++) {
        System.out.println(uniqueKeys.get(i));
    }
}

【问题讨论】:

  • 听起来你应该使用Random 来生成你的元素。
  • 看看你的 for 循环 - 你有 101 次迭代而不是 100 次。使用 i
  • 如果您允许重复,为什么引用命名为uniqueKeys
  • 这是你的作业吗?使用Random 生成唯一的整数,然后使用HashMap... 无论如何,如果您自己进行研究并尝试对您的代码进行一些实验,可能会更好。尝试研究我提到的课程。
  • 是的,这是为了做作业。 Jarrod,我刚刚问了如何添加带有重复项的随机整数,因为我计划自己将 ArrayList 更改为 TreeSet 并过滤掉重复项。

标签: java arrays random elements


【解决方案1】:

我建议使用 Set 和 Random 的组合。使用 Set,您将摆脱重复项。使用 Random,您将获得(伪)随机数。

final int KEYS_COUNT = 100;
final int MAX_KEY_VALUE = 1000;

Set<Integer> setOfKeys = new HashSet<>();
Random random = new Random();

while (setOfKeys.size() <= KEYS_COUNT) {
    setOfKeys.add(random.nextInt(MAX_KEY_VALUE));
}

Set setOfKeys 将包含 100 个值小于 1000 的唯一随机数。然后您可以使用 toArray() 方法从 Set 中创建数组。

如果你让KEYS_COUNT 等于MAX_KEY_VALUE,那么这些值就不会很随机,它们只会被打乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多