【问题标题】:Create an array of UNIQUE 5-digit random numbers in Java?在Java中创建一个唯一的5位随机数数组?
【发布时间】:2013-01-27 15:56:37
【问题描述】:

我有以下代码生成 5 位随机数并将它们添加到 ArrayList。但是,这些数字必须是唯一的 ID。

for(int i = 0; i < myArr.length; i++) {
    int id = (int) (Math.round(Math.random() * 89999) + 10000);
    idArr.add(id);
}

我正在尝试弄清楚如何在添加之前检查该数字是否已经在数组中,但我无法找到最好的方法。

【问题讨论】:

    标签: java arrays random arraylist unique


    【解决方案1】:

    使用ArrayList 而不是array。这样你只需要使用ArrayList#contains(obj) 方法来测试id 是否已经在ArrayList 中。

    或者,您可以只使用HashSet,使用HashSet#contains() 方法会更快。

    【讨论】:

    • 感谢 Rohit - contains 方法正是我所需要的
    【解决方案2】:

    不要使用(数组)列表,使用Set

    Set<Integer> set = ...;
    while (set.size() < myArr.length) {
      set.add(yourRandomNumber);
    }
    

    【讨论】:

    • 次要评论:OP 要求的是“唯一的 5 位数字”,而不是“5 个唯一的数字”。数字5应该是myArr.length
    • 谢谢nd。我试试看
    【解决方案3】:

    您可以创建一个Set 的号码。例如:

    Set<Integer> intSet = new HashSet<Integer>();
    while(intSet.size() < myArr.length) {
        intSet.add(getNextRandomInt());
    }
    

    那么你可以用那个Set做任何事情。

    所以,如果你需要一个数组,只需调用:

    Integer[] intArray = intSet.toArray(new Integer[myArr.length]);
    

    或者,如果您需要 ArrayListint[] 数组:

    // ArrayList:
    List<Integer> ints = new ArrayList<Integer>();
    ints.addAll(intSet);
    
    // int[] array:
    int[] intArray = new int[myArr.length];
    for( int i = 0; i<intArray.length; ++i) {
        intArray[i] = int.get(i);
    }
    

    【讨论】:

      【解决方案4】:

      任何涉及循环直到找到足够的唯一随机数的事情都不能保证完成。如果极不可能的话,随机数生成器可能永远不会在合理的时间内输出足够的唯一数。

      (我知道这在实践中永远不会发生,但这是理论上的可能性。)

      一种安全的替代方法是选择一个随机数,然后循环递增它,直到有足够的数字。

      int n = new Random().nextInt(89999 - myArr.length) + 10000;
      for (int i = 0; i < myArr.length; i++) {
          idArr.add(n++);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多