如何防止随机数生成器重复数字?
这是我的代码中生成随机数的部分:
String [] number = {"1","2","3","4","5","6"};
Random random = new Random();
int Select = random.nextInt(number.length);
System.out.println(number[Select]);
有时它会重复数字,例如“4”,然后又是“4”。我希望它总是一个不同的数字。
我会这样做
class Generator {
List<String> number = Arrays.asList("1", "2", "3", "4", "5", "6");
int n = 0;
Generator() {
Collections.shuffle(number);
}
String next() {
return number.get(n++);
}
对于这样一小组数字(可以轻松放入内存中的数字),我会:
ArrayList<String>
,Collections.shuffle
随机化此列表这是我的解决方案..我使用 ArrayList 而不是常规数组,因为它是字符串..
import java.util.*;
class RandomWithoutRepeat {
public static void main(String[] args) {
ArrayList<String> number = new ArrayList<String>(
Arrays.asList("1","2","3","4","5","6"));
Random random = new Random();
int size = number.size();
int Select = random.nextInt(number.size());
for(int i =0; i< size; i++)
{
Select = random.nextInt(number.size());
System.out.println(number.get(Select));
number.remove(Select);
}
}
}
一个简单的方法可能是:
store what values have already been generated in an array x
while new value is in the var x
generate a new value again
use new value in the way you want
公共静态无效主要(字符串[]参数){
Integer[] arr = new Integer[1000];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
Collections.shuffle(Arrays.asList(arr));
System.out.println(Arrays.toString(arr));
}
嗯,我不是 100% 了解您的代码,但似乎您正在打印数字的长度,而不是数字......为什么?您是否试图防止连续获得两个 4 位数字?好的,我明白了... nvm。
编辑:好的,所以让数组在每次循环运行时删除“选择”变量(如果你没有它,请创建一个循环)。那么,这个号码就不可能被选中了。