2017-09-26 5 views
2

とint型の配列を埋めようと、このために私を許して。は、Javaは、私がこのサイトに新たなんだと私は英語非常に悪いんだユニークな番号

私は私の機能に問題があります。

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は)新しい乱数、ちょうどループ一部を生成傾けます。 EXの場合 :

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

あなたは(クイックフィックスがwhileisvalid = trueにする必要があります)、その場合にはiをインクリメントしていないので、それはあなたが無限ループを取得し、再び、したがって、trueことはありませんisvalid = false;たら。

+0

少なくともイム疲れすっごい... ...ありがとうございます! – Gregori

1

私はあなたにこれらの番号を生成する別のアプローチをお勧めします。

まず、1から100までのすべての数字を持つListを作成します。次に、あなただけの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回の反復であなたは役に立たないランダムな呼び出しなしに、必要な配列を得ることが保証されている。この方法はそれらを置きます。

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; 
} 
関連する問題