2010-11-29 27 views
1

乱数のarraylistを生成して表示しようとしています。私はどこが間違っているのか分からない。私はshowArrayメソッドが2つの乱数を表示しているので、2番目の1をn-2回繰り返すので、正しく動作していないと思います。Javaで乱数のarraylistを作成して表示するにはどうすればよいですか?

private static ArrayList<Integer> RandomArray(int n) 
    { 

     ArrayList<Integer> arrayRandom = new ArrayList<Integer>(n); 

     for (int i=0; i<n; i++) 
     { 
      Random rand = new Random(); 
      rand.setSeed(System.currentTimeMillis()); 
      Integer r = rand.nextInt() % 256; 
      arrayRandom.add(r); 

     } 

     return arrayRandom; 

    } 

private static void ShowArray(ArrayList<Integer> randomArray) 
{ 
    int n = randomArray.size(); 

    ArrayList<Integer> showArray = new ArrayList<Integer>(n); 

    for (int i = 0; i<n; i++) 
    { 
     int r = randomArray.get(i); 
     showArray.add(r); 
    } 
    System.out.println(showArray); 

} 

public static void main(String args[]) 
    { 

     ShowArray(RandomArray(5)); 

    } 

だから、例えばこれは、任意のヘルプははるかに高く評価され

[132、152、152、152、152]

の出力を生成します。事前に感謝します

答えて

6

ループからランダムオブジェクトを取り出し、毎回シードを設定しないでください。

ArrayList<Integer> arrayRandom = new ArrayList<Integer>(n); 

Random rand = new Random(); 
rand.setSeed(System.currentTimeMillis()); 
for (int i=0; i<n; i++) 
{ 
    Integer r = rand.nextInt() % 256; 
    arrayRandom.add(r); 
} 

これはうまくいくはずです。

+1

正確に!さもなければ、同じ種子を持つ乱数ジェネレータを数回再設定することになります(1ミリ秒より速く実行されるため) – Lagerbaer

+0

ありがとうございます!これは治療法です。より多くの経験を持つ人に一番明白なことは、私のような初心者のためにとてもdistreessingです! – Sparky123

1

シードをリセットして擬似乱数ジェネレータ(PRNG)シーケンスを再開するのは問題です。

Random rand = new Random(); 
rand.setSeed(System.currentTimeMillis()); 
for (int i=0; i<n; i++) 
{ 
    Integer r = rand.nextInt(256); 
    arrayRandom.add(r); 

} 
+0

ご協力いただきありがとうございます。完璧に動作します。とても有難い! – Sparky123

0

反復ごと

 Random rand = new Random(); 
     rand.setSeed(System.currentTimeMillis()); 

は一度やれシードを設定しないでください:

はこれを行います。

関連する問題