我是这个网站的新手,我的英语很差,请原谅我。
我的功能有问题:
public void generate(int[] array) {
int i=0;
boolean isvalid=true;
while (i < 5) {
int rng = (int)(Math.random()%100*100);
for (int j=0; j < 5; j++) {
if (array[j] == rng) {
isvalid=false;
System.out.println("duplicate: "+rng);
}
}
if (isvalid) {
array[i]=rng;
System.out.println(rng);
i++;
}
}
}我需要填充一个5大小的int数组,其唯一的随机数介于0到100之间。这是一项工作,但有时会有麻烦,并开始一个没完没了的循环,出于某种原因,我的编译器(netbeans)无法生成一个新的随机数,只需循环一些。前任:
duplicate 62
duplicate 62
duplicate 64
duplicate 97
duplicate 97
duplicate 64
duplicate 97
duplicate 62
duplicate 64
duplicate 62
duplicate 64
duplicate 62
duplicate 97
duplicate 97
duplicate 56
duplicate 97
duplicate 62
duplicate 56
duplicate 56
duplicate 56
duplicate 64
duplicate 56
duplicate 62
duplicate 56有人对我的问题有什么有用的建议吗?提前感谢!
发布于 2017-09-26 20:59:24
一旦isvalid = false;,它就不再是true了,因此您得到了一个无限循环,因为在这种情况下不增加i (快速修复应该是while内的isvalid = true )。
发布于 2017-09-26 21:08:32
我建议你用另一种方法来生成这些数字。
首先,创建一个List,其中包含从1到100的所有数字。然后,您只需从list中选择随机数,并将它们放入数组中。
List<Integer> list = IntStream.rangeClosed(0, 100)
.boxed().collect(Collectors.toList());
int[] randomArray = new int[100];
Random random = new Random();
for(int i = 0; i < 100; i++) {
Integer randomIndex = random.nextInt(list.size());
randomArray[i] = list.get(randomIndex);
list.remove(randomIndex);
}这样,您就可以保证在一次迭代中获得所需的数组,而不需要无用的随机调用。
发布于 2017-09-26 21:33:48
private List getRandomNumberList(){
List<Integer> alist = new ArrayList<>();
while (alist.size() < 5){
// for numbers from 0 to 100 use factor 101
int number = (int) (Math.random() * 101);
if (!alist.contains(number)){
alist.add(number);
}
}
return alist;
}https://stackoverflow.com/questions/46435700
复制相似问题