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个随机数。为什么呢?
答案 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
循环不能保证)。
这种方法的一个缺点是它“消失”了几个数字(与之前的数字相同)。我不知道是否有更聪明的方法。