2017-09-26 126 views
2

我是這個網站的新手,我的英語很差,請原諒我。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 

有人對我的問題任何有用的提示嗎? 在此先感謝!

回答

2

一旦isvalid = false;這是從來沒有true一次,因此你會得到一個無限循環,因爲你沒有在這種情況下,增加i(快速修復應該是isvalid = truewhile內)。

+0

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

1

我會建議你另一種產生這些數字的方法。

首先創建一個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); 
} 

在這樣保證了在一次迭代中,您將獲得所需的陣列,沒有無用的隨機電話這種方式。

1

使用設施Java 8爲您提供:使用0到100之間的隨機整數的無限流,然後是不同的,然後限制到5.因爲這是作業,我認爲您應該做出一些努力,所以我不會發布少數需要的線。

0
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; 
}