2011-09-09 13 views
3

コレクションを使用せずに配列をシャッフルするコードを記述しようとしています。配列のシャッフルが機能しない

マイシャッフルコード

金額

private double amounts[] = { 0, 0.01, 1000000, 25, 250000, 75, 50, 1000, 
      200, 100, 400000, 750, 5000, 750000, 500, 100000, 300, 75000, 800, 
      20, 300000, 10, 50, 750, 25, 5, 1 }; 

public void Shuffle(){ 

     Random rgen = new Random(); 
     for (int i=0; i > amounts.length; i++) { 
      int randomPosition = rgen.nextInt(amounts.length); 
      double temp = amounts[i]; 
      amounts[i] = amounts[randomPosition]; 
      amounts[randomPosition] = temp; 
    } 
    } 

開始コードそれ

public void casesSetup() { 

     for (int i = 0; i < briefcase.length; i++) { 

      if (i == 0) { 

      } else { 
       briefcase[i] = new Briefcase(); 
       double value = amounts[i]; 
       briefcase[i].setAmount(value); 
       briefcase[i].setFace(i); 
      } 
     } 
    } 

は、ここでは私の問題は、彼らは誰もがアイデア理由があり、ランダム化されていないということでしょうか?あなたの最初のスニペットでは、forループ

+0

'>'の代わりに ' Juan

答えて

1

私の先端が逆にシャッフルを開始することである。

Random rgen = new Random(); 
for (int i = amounts.length - 1; i > 0; --i) { 
    int randomPosition = rgen.nextInt(i + 1); 
    double temp = amounts[i]; 
    amounts[i] = amounts[randomPosition]; 
    amounts[randomPosition] = temp; 
} 

にRandom.nextInt(N)の分布が均一であると仮定すると0..N-1に、これは各順列が均等であるとあなたの配列をシャッフルしますおそらくそうです。その議論はまっすぐである。

5

は、それが

for (int i=0; i < amounts.length; i++) { 
3

店舗一覧内の値と Collections.shuffle http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.Listを使用)

すべきではない

for (int i=0; i > amounts.length; i++) { 

間違っているように見えます

これを自分で転がした手は不必要なようです

+0

明らかに、彼がパラアイス/宿題として、あるいは単にJavaを学ぶことをしていない限り? –

+0

また、シャッフルは実際には非常に難しい問題です。間違ってしまうのは非常に簡単です。はい、 'Collection.shuffle'を使用してください。 – Bombe

+1

私はすでに知っている、私はちょうどこの時点でAPISを使用していない –

0

あなたのforループが間違っていることに加えて、あなたは一様ランダム分布を得るために

rgen.nextInt(amounts.length) 

rgen.nextInt(amounts.length - i) + i 

に変更する必要があります。

関連する問題