Sag*_*tam 8 java random numbers
我想生成0到9范围内的四个随机数.使用Java Random类生成四个随机数很容易.
Random random = new Random();
int numbers[] = new int[4];
for(int i=0;i<4;i++){
numbers[i] = random.nextInt(10);
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以得到四个数字的易象,数组9369,4702等.在这种情况下,有可能在四个数字被重复了许多可能性,我不想在这样的数字重复.
在这里,我想所有的四位数以上阵列是唯一的,这样我可以输出像9543,1234等.
为此,我想到了以下方式.
有没有比上述方法更好的方法,以便我可以轻松快速地获得四个独特的随机数?
任何建议都表示赞赏.
Era*_*ran 32
你可以使用Collections.shuffle
:
// generate a List that contains the numbers 0 to 9
List<Integer> digits = IntStream.range(0,10).boxed().collect(Collectors.toList());
// shuffle the List
Collections.shuffle (digits);
// take the first 4 elements of the List
int numbers[] = new int[4];
for(int i=0;i<4;i++){
numbers[i] = digits.get(i);
}
Run Code Online (Sandbox Code Playgroud)
你可以使用Set
它,想法是生成你的随机数,然后把它放在一个集合中并继续这样做,直到你的集合中有4个元素,完成后你将有4个独特的随机数存储在你的集合中
Set<Integer> randomSet = new HashSet<>();
while(randomSet.size() <4)
randomSet.add //add your generated random number
Run Code Online (Sandbox Code Playgroud)
如果您可以创建一个快速函数f,将自然数映射到满足您要求的数字集,则只能生成一个随机数.然后你的运行时间受到f的限制.如果您可以创建一个相当快的f,这是最有效的方法.
最简单的解决方案是将满足条件的所有数字放在一个数组中,并创建一个随机数作为该数组的索引. - > O(1)
如您所见,有很多方法可以实现您的目标.这是我的建议
Random random = new Random();
// prepare all valid digits
List<Integer> from = new ArrayList<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9));
// take set in an random order
int numbers[] = new int[4];
for(int i = 0; i < numbers.length; i++){
numbers[i] = from.remove (random.nextInt (from.size()));
}
for (int num : numbers) {
System.out.println(num); // when you prefer this
}
Run Code Online (Sandbox Code Playgroud)