生成10,000个唯一的9位数字

时间:2014-05-20 11:30:31

标签: java

public static void main(String[] args) {
    for(int i = 0; i < 10000; i++) {
        long number = (long) Math.floor(Math.random() * 90000000) + 100000000L;
        System.out.println(number);
    }
}

以上代码不会生成10,000个随机数。为什么呢?

5 个答案:

答案 0 :(得分:2)

如果您不需要统一分发,则可以从100,000,000开始并添加在[1和89,999]之间随机选择的增量。重复10,000次。

这将为您提供一些随机生成的非重复数字序列。

但它们不会均匀分布(不太可能获得高范围内的数字,如999,xxx,xxx),并且它们将严格提升,因此如果有下一个数字,你很有可能猜到下一个你知道前一个(&#34;好&#34; = 1/89999)。

答案 1 :(得分:0)

请这样做:

public static void main(String[] args) {
    Set<Integer> uniques = new HashSet<>(15000);
    Random random = new Random();
    for (int i = 0; i < 10000;) {
        int number = random.nextInt(Integer.MAX_VALUE);
        if (uniques.add(number)) {
            System.out.println(i + ": " + number);
            i++;
        }
    }
}

答案 2 :(得分:0)

使用Set,您可以确保唯一性。尝试,

 Set<Long> resSet=new HashSet<>();
 for(int i = 0;  resSet.size()<10000; i++){
     long number = (long) Math.floor(Math.random() * 90000000) + 100000000L;
     resSet.add(number);
 }
 System.out.println(resSet);

答案 3 :(得分:0)

我有类似的问题,我做了以下操作,生成随机数并检查它是否已生成,如果没有,只需使用并记下它。

List<String> gen = new ArrayList<String>();
long number=0;
int i=0;

while(i<10000)
{
   while(!gen.contains(number) || i==0)
      number = (long) Math.floor(Math.random() * 90000000) + 100000000L;
   gen.add(number);
   System.out.println(number);
   i++;
}

我在.NET中没有对代码进行过测试,但是我搜索了代码等价。

希望它有所帮助!

答案 4 :(得分:0)

对@ Masud代码的一个小贡献:

         Set<Long> resSet = new HashSet<Long>();
         while(true) {
             long number = (long) Math.floor(Math.random() * 90000000) + 100000000L;
             resSet.add(number);
             if(resSet.size() == 10000)
                 break;
         }

这样你肯定可以获得10000个唯一数字(因为for循环不能保证)。

这种方法的一个缺点是它“消失”了几个数字(与之前的数字相同)。我不知道是否有更聪明的方法。

相关问题