2016-06-16 11 views
0

インデックスを変更することによって、配列の要素をランダムに変更しようとしています。インデックスを変更して配列の値の順序を変更する

これまでの私のコードは次のとおりです。

public static string[] Shuffle(string[] wordArray) 
    { 
     int swapIndex = 0; 
     string temp; 
     Random random = new Random(); 
     for (int i = 0; i < wordArray.Length; i++) 
     { 
      System.Console.WriteLine("random " + random.Next(0, wordArray.Length)); 
      swapIndex = (int)(random.Next(0, wordArray.Length)); 

      temp = wordArray[i]; 
      wordArray[i] = wordArray[swapIndex]; 
      wordArray[swapIndex] = temp; 
     } 
     return wordArray; 
    } 

及び方法は、以下であることを呼び出す関数:

static string[] words1 = new string[] { "1", "2", "3" }; 
    static string[] days = new string[] { "M", "T", "W", "Th", "F", "S", "Su" }; 

    public static void playListCreation() 
    { 
     for (int j = 0; j < days.Length; j++) 
     { 
      var result = Shuffle(words1); 
      foreach (var i in result) 
      { 
       System.Console.WriteLine(i + " "); 
      } 
      System.Console.WriteLine("/n"); 
     } 
    } 

コードの問題は、毎回Imが同じになっていることです数字はswapIndexです。私は常に取得する:すべての反復で

ランダム2

ランダム2

ランダム0

。そして私は何が間違っているのか分からない。

アイデア?前もって感謝します。

添加すると、今ソリューションは良いです。しかし完璧ではない。私はランダムな値を持つので、同じ結果を得ることができます。例えば

月曜日:

曲1

曲2

曲3

火曜日:

曲2

曲1

曲3

水曜日:

曲1

曲2

曲3

のように...この場合

そして

からリスト月曜日

水曜日

は同じです。私はそれを制御する必要がありますが、コードで見ることができるように、一日からリストを取得したら、印刷します。私はそれを配列やタプルに置くことを考え、そのタプルが存在するかどうかをチェックしましたが、あまりに複雑すぎると思います。この状況をどうやって解決できますか?ありがとう!!

+0

Console.WriteLineを '内部一見、' random.Next(0、wordArray.Length) '表現で'と' swapIndex = '文は異な​​る結果を返します。 'swapIndex'自体を表示することを検討してください。 –

答えて

3

Randomを宣言して初期化する必要があります。 Shuffleメソッドの中でそれを宣言し、それをループで呼び出しています。これは、あなたのRandomオブジェクトが毎回同じシードで初期化されていることを意味します。したがって、明らかに同じシーケンスの「ランダム」番号が生成されます。

private static Random random = new Random(); 

    public static string[] Shuffle(string[] wordArray) 
    { 
     int swapIndex = 0; 
     string temp; 

     for (int i = 0; i < wordArray.Length; i++) 
     { 
      System.Console.WriteLine("random " + random.Next(0, wordArray.Length)); 
      swapIndex = (int)(random.Next(0, wordArray.Length)); 

      temp = wordArray[i]; 
      wordArray[i] = wordArray[swapIndex]; 
      wordArray[swapIndex] = temp; 
     } 
     return wordArray; 
    } 

はまた、停止-CRANは有効なポイントを持っていた - Console.WriteLineはその後、別の乱数swapIndex変数を取得します。

あなたがswapIndex変数の値を印刷したい場合には、このようにそれを実行します。

swapIndex = (int)(random.Next(0, wordArray.Length)); 
System.Console.WriteLine("random {0}", swapIndex); 
関連する問題