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 = truewhile内)。

+0

Omg ...至少我是累了...谢谢! – Gregori

我会建议你另一种产生这些数字的方法。

首先创建一个List,其中所有数字从1100。然后,你只需选择从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; 
}