我试图用Random()创建10个不同元素的数组,所以基本上我有这个
public static int[] RandomArray (int xArra[]) throws java.io.IOException {
Random Rand = new Random();
int nal;
for (int i = 0; i < xArra.length; i++) {
nal = Rand.nextInt(11); /*I would like to make this thing work with any
numbers, for example, changing this to 50 or 100.
In an array of 10 elements it should be
impossible to have a duplicate because with
11 it just prints from 1 to 10.
Thats why i put 11 here. */
for ( int j = 0; j < xArra.length; j++) {
if (nal == xArra[j]) {
nal = Rand.nextInt(11);
j=0;
}
}
xArra[i] = nal;
}
return xArra;
}
基本上我在nal中存储一个随机数,然后我在一秒钟内运行我的数组For For check 这个已经给定的随机数,如果它等于数组中给出的任何数字,它再次随机改变它,并运行For再次检查新数字是不重复的,如果不是,我存储在xArra [i ]
当我运行3次时,结果如下:
首先运行: 8 1 6 4 3 2 10 8 9 7
第二轮: 9 3 8 10 7 1 4 五 9 6
第三轮: 3 五 2 3 6 7 1 4 10 9
所以,你可以看到我几乎虽然我有它,但它只重复1个数字,没有2或3,所以基本上我只想让这个东西工作。我只想打印10个随机数,没有重复,没有重复。
见下我的完整代码:
import java.io.*;
import java.util.*;
public class ArraynoR {
public static void main (String[] args) throws java.io.IOException {
int Array[]= new int [10];
RandomArray(Array);
for(int i=0; i<Array.length; i++){
System.out.println("Array[" + (i + 1) + "]:" + Array[i]);
}
}
public static int[] RandomArray (int xArra[]) throws java.io.IOException... //up
}
请原谅我的英语不好,我希望自己解释一下。
谢谢!
答案 0 :(得分:2)
创建一个包含感兴趣范围内的数字的ArrayList
,而不是存储和搜索重复项。使用Collections.shuffle()
随机化值,然后从混乱集中选择任意数量的值。保证不提供重复,并且比搜索/拒绝方法更有效。
附录
也许不是最漂亮的代码,但它起作用并给出了这个想法......
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class ShuffleDemo {
public static int[] RandomArray(int len) {
ArrayList<Integer> al = new ArrayList<Integer>(len);
for(int i = 1; i <= len; ++i) { // initialize the ArrayList with values 1 to len
al.add(i);
}
Collections.shuffle(al); // shuffle to random order
int[] results = new int[len];
// switching return type to ArrayList could eliminate the following loop
for(int i = 0; i < len; ++i) { // copy to array of ints
results[i] = al.get(i); // note: create a subset by reducing
} // the upper bound for this loop
return results;
}
public static void main(String[] args) {
System.out.println(Arrays.toString(RandomArray(10)));
}
}
答案 1 :(得分:0)
当您为内部for循环重置时设置j = -1并尝试它。然后它应该工作
for ( int j = 0; j < xArra.length; j++) {
if (nal == xArra[j]) {
nal = Rand.nextInt(11);
j=-1;
}
}
在for循环结束时,循环递增变量,所以当你将它设置为0时,在下一次检查之前它由于for循环的内部代码而变为1
答案 2 :(得分:0)
您可以在Apache Math中使用类org.apache.commons.math3.random.RandomDataGenerator的方法nextPermutation(请参阅此处的帮助docs)。此方法生成随机数而不重复。