2016-12-04 3 views
0

これは私の質問の機能である、私は一度に1行を取得するためにShuffledList関数にデータの収集を送るなぜC#のList <E>から繰り返しオブジェクトが取得されるのですか?

private void nextQuestion_Question() 
    { 
      ql1 = ShuffleList(ql1); 
      currentQuestion_List = ql1.ElementAt(0); 
      //ql1.RemoveAt(0); 

      txtQ.Text = currentQuestion_List.text; 
      btnA.Text = currentQuestion_List.a; 
      btnB.Text = currentQuestion_List.b; 
      btnC.Text = currentQuestion_List.c; 
      btnD.Text = currentQuestion_List.d; 

    } 

が、この機能を、それが繰り返さオブジェクトに

を返すいくつかの回
private List<E> ShuffleList<E>(List<E> inputList) 
    { 
     List<E> randomList = new List<E>(); 
     Random r = new Random(); 
     int randomIndex = 0; 
       while (inputList.Count>0) 
       { 
        randomIndex = r.Next(inputList.Count); //Choose a random object in the list 
        randomList.Add(inputList[randomIndex]); //add it to the new, random list 
        inputList.RemoveAt(randomIndex); //remove to avoid duplicates   
       } 
     return randomList; //return the new random list 
    } 

メモマルチ選択ゲームを作成しようとしていますが、うまく動作しますが、何度か同じ質問が繰り返し表示されます 私を助けてくださいこの問題を解決するには

+0

シャッフルリストに欠陥があります。インプレイスのスワップ要素としてはより効率的です;アプリの存続期間に同じランダムオブジェクトを使用する必要があります。適切なシャッフルは、各要素が1回だけ交換されるように後方にループします。ゲームごとに一度だけシャッフルしてください – Plutonix

+0

私もあなたが言ったようにしようとしていますが、それは私と一緒にそれを修正することはできません? –

+0

適切にdshuffleする方法を示す多くの答えがここにあります – Plutonix

答えて

2

繰り返しシャッフルに問題があると思います。シャッフルリストを一度ストアして、ゲームセッション中に同じ質問位置を2回生成する場合を避けるようにしてください。

bool listShuffled = false; 
private void nextQuestion_Question() 
{ 
     if(!listShuffled){ 
      listShuffled = true; 
      ql1 = ShuffleList(ql1); 
     } 

     currentQuestion_List = ql1.ElementAt(0); 
     //ql1.RemoveAt(0); 

     txtQ.Text = currentQuestion_List.text; 
     btnA.Text = currentQuestion_List.a; 
     btnB.Text = currentQuestion_List.b; 
     btnC.Text = currentQuestion_List.c; 
     btnD.Text = currentQuestion_List.d; 

} 
+0

私のコードを編集してコメントを入れることができますか? –

+0

@YousifGarabet編集、試してください – Nigrimmist

+0

親愛なる@Nigrimmistは同じオブジェクトを常に返します –

関連する問題