Java 无需更换的随机数发生器?
我试着编写一个随机数生成器,它不会多次生成相同的随机数。但是我不能也不知道为什么。目前我的代码是这样的:Java 无需更换的随机数发生器?,java,random,Java,Random,我试着编写一个随机数生成器,它不会多次生成相同的随机数。但是我不能也不知道为什么。目前我的代码是这样的: public void printNS(){ System.out.print("Numeros Numeros: "); for(int i=0; i < 5 ; i++){ System.out.print( (int)(Math.random()*50) + ","); } System.out.print("; Numero
public void printNS(){
System.out.print("Numeros Numeros: ");
for(int i=0; i < 5 ; i++){
System.out.print( (int)(Math.random()*50) + ",");
}
System.out.print("; Numeros Stars: ");
for(int i=0; i < 2 ; i++){
System.out.print( (int)(Math.random()*12)+ ",");
}
}
public void printNS(){
系统输出打印(“Numeros Numeros:”);
对于(int i=0;i<5;i++){
System.out.print((int)(Math.random()*50)+“,”);
}
系统输出打印(“;数字星:”);
对于(int i=0;i<2;i++){
System.out.print((int)(Math.random()*12)+“,”);
}
}
在java 8中,您可以执行以下操作
int[] rand = new Random().ints(start, end).distinct().limit(number).toArray();
有关更多详细信息/选项,请参阅
在Java8之前,您可以使用集合。生成随机数,直到设置的大小小于所需的随机数
private printStars(int loops, int factor) {
for(int i=0; i < loops ; i++){
System.out.print( (int)(Math.random()*factor) + ",");
}
希望有帮助。关键是:当你有重复的代码时,看看那些“相同”的元素;然后将它们转移到另一种方法中 所以你想要
k
从0
到n
的不同随机数(使用k
)
两种可能的方法:
k
随机数,就像您已经做的那样,并将它们存储在数据结构中。每次你选择一个数字时,检查它是否已经包含在结构中:如果是,继续选择,直到你有一个“新”的随机数。这是一种足够简单的方法,但循环可能会阻止您的应用程序。我建议使用集合
,因为它根据定义存储不同的元素
Set<Integer> set = new LinkedHashSet<>(); // unordered
while (set.size() < k){
set.add((int)(Math.random()*n));
}
System.out.println(set);
我建议使用第二种方法,因为它更干净,但我不知道您的效率要求。您可以使用集合结构吗?生成真正的随机数比您想象的要困难得多…大多数都是伪随机的。一个简单的解决方案是存储生成的号码,以便以后检查是否有重复。但这是一个记忆的代价。请你更清楚地说明你想问的是什么!您也可以尝试收藏。洗牌(0-9的数组)。好的,伙计,非常感谢,再问一个问题,有没有更简单的方法像我一样随机生成数字?你是什么意思
Math.random()
看起来很简单
Set<Integer> set = new LinkedHashSet<>(); // unordered
while (set.size() < k){
set.add((int)(Math.random()*n));
}
System.out.println(set);
List<Integer> list = new ArrayList<>(n);
for (int i = 0; i < n; i++){
list.add(i);
}
Collections.shuffle(list);
list.subList(0, k).clear();
System.out.println(list);