2017-03-10 17 views
-3

0から2までの乱数を生成するループを作成しようとしていて、この番号を配列のインデックスとして使用しています。これは3回実行され、次の各番号は異なっていなければなりません(例えば、私はint配列{1,2,3}を持っています)プログラムの中に入れば、3-1-2, 3-2-1, 2-3-1, 1-2-3, 2-1-3などを出力しますが、決して3-1-3など。このケース3には、繰り返される。ここ forループのロジックに問題があります

は、私はこれをしようとするために使用していたコードは次のとおりです。

int ans1 = getRand(); 
int ans2 = getRand(); 
int ans3 = getRand(); 

public int getRand() 
{ 
    done = true; 
    while (done) 
    { 
     tempAns = rand.Next(0, 2); 
     done = false; 
     foreach (int i in answersDone) 
     { 
      if (tempAns == i) 
      { 
       done = true; 

      } 
     } 
    } 
    answersDone.Add(tempAns); 
    return tempAns; 
} 

私はこのコードが無限ループに入って実行して、私はなぜわからないとき

+0

通常、我々ループ 'ながら、 (!完了) '。 –

+0

'answersDone'には何がありますか? – BackDoorNoBaby

+0

あなたの 'foreach'では 'if'が最終的に真実になり、その中であなたが 'done'を真実にするので、あなたのwhileは決して終了しません。 – pooyan

答えて

1

Random.Nextあなたの範囲は0から2までで、チャンスはあなたが得るでしょうか? cate値。それは3つのレコードを持っている場合

private void NewNumber() 
{ 
    MyNumber = rand.Next(0, 2); 
    if (!answersDone.Contains(MyNumber)) 
     answersDone.Add(MyNumber); 
} 

チェック回数を新たに乱数を生成するための

public List<int> answersDone = new List<int>(); 

機能。

if(answersDone.Count != 2){ 
    NewNumber(); 
}else{ 
    //do whatever you want 
} 
0

「foreach」では、「if」が最終的に真となり、その内部で「done」が真実になるため、あなたのwhileは決して終了しません。 私は、これはあなたが欲しいものだと思う:

int ans1 = getRand(); 
int ans2 = getRand(); 
int ans3 = getRand(); 

public int getRand() 
{ 

done = false; 
while(!done) 
{ 
    tempAns = rand.Next(0, 2); 
    done = false; 
    foreach(int i in answersDone) 
    { 
     if (tempAns == i) 
     { 
      done = true; 

     } 
    } 
} 
    answersDone.Add(tempAns); 
    return tempAns; 
} 
} 

あなたはまた、次のようにbreakを使用することができます。

int ans1 = getRand(); 
int ans2 = getRand(); 
int ans3 = getRand(); 

public int getRand() 
{ 

done = false; 
while(!done) 
{ 
    tempAns = rand.Next(0, 2); 
    done = false; 
    foreach(int i in answersDone) 
    { 
     if (tempAns == i) 
     { 
      done = true; 
      break; 
     } 
    } 
} 
    answersDone.Add(tempAns); 
    return tempAns; 
} 
} 
0

あなたの配列をランダム化するには:

int[] inputArray = {1, 2, 3}; 
Random rnd = new Random(); 
int[] randomArray = inputArray.OrderBy(x => rnd.Next()).ToArray(); 
関連する問題