Java试图用唯一的数字填充int数组
问题描述:
我是这个网站的新手,我的英语很差,请原谅我。Java试图用唯一的数字填充int数组
我有我的功能相关的问题:
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++;
}
}
}
我需要0和100之间充满了独特的随机数的5大小int数组这是工作,但有时窃听,并开始无休止循环,出于某种原因,我的编译器(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
有人对我的问题任何有用的提示吗? 在此先感谢!
答
一旦isvalid = false;
这是从来没有true
一次,因此你会得到一个无限循环,因为你没有在这种情况下,增加i
(快速修复应该是isvalid = true
的while
内)。
答
我会建议你另一种产生这些数字的方法。
首先创建一个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);
}
在这样保证了在一次迭代中,您将获得所需的阵列,没有无用的随机电话这种方式。
答
使用设施Java 8为您提供:使用0到100之间的随机整数的无限流,然后是不同的,然后限制到5.因为这是作业,我认为您应该做出一些努力,所以我不会发布少数需要的线。
答
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;
}
Omg ...至少我是累了...谢谢! – Gregori