2016-12-26 18 views
1

私はVisual Studioで作業しています。 私は20のフィールドを持つint配列を持っていますし、私はfor-loopを20回実行してすべての列を記入しています。生成された乱数を挿入し、whileループはその配列に乱数が存在するかどうかを調べます。もしそうであれば、forループが終了するまで新しいランダムを作成してwhileループを再度実行します。C#for/whileループは完全に実行されません。

static int[] usedNumbers = new int[20]; 

public static void Show() { 

for(int a = 0; a < 20; a++) 
     { 

      randomNr = Rnd.Next(0, 20); 
      searchRnd = true; 

      while (searchRnd) 
      { 
       if (usedNumbers.Contains(randomNr)) 
       { 
        randomNr = Rnd.Next(0, 20); 
        searchRnd = true; 
       } 
       else { 
        searchRnd = false; 
        // code... 
       } 
      } 

     } 
} 




Show(); 
console.writeLine("{0}", usedNumbers[0]); 

私はコンソールを実行すると何らかの理由でこのコードが完全に実行されず、何も表示されません。また、ウィンドウが閉じず、エラーが発生した場合など、エラーメッセージが表示されません。おそらく時間制限などがありますか?

+2

"私は何も見ません"。あなたは何を見たいですか?コードは何も出力しません。 [mcve]を入力してください。表示されたコードが不完全なので、不足している部分がエラーであるのか、故意に除外されたのかは明確ではありません。 'usedNumbers'は決して追加されず、' searchRnd'は決して 'false'に設定されません。 – kaylum

+1

戻ってくる乱数は0〜19になることに注意してください。デフォルト値である0は既に配列に入っています。 20個の一意の数字*を配列に追加することはできません。19. Rnd.Next(1、20)を使ってみてください。 –

+0

上記で指定したコードは、searchRndをfalseに設定しません。 –

答えて

1

私たちには表示されていないいくつかのコードがプログラム内に存在する必要があります。なぜなら、今のところ外側のforループは、各繰り返しでwhileループを直ちに終了するからです。一方、入力配列に整数0から19のすべてが含まれている場合、whileループは決して終了しません。

あなたが達成しようとしているように見えるのは​​です。これは配列を入力として受け取り、その順序をランダム化します。

+1

配列にはデフォルトですべて0が含まれているため、最終的な試みでは値は配列に存在しません。 1から19までの20個のユニークな数字はありません。 –

+0

私はいくつかの回答をしましたが、私がゴミを話している間にそれらを削除しました。はい、それは無限ループの原因と思われます。私は、反復の回数を19に変更することでフィッシャー・イェイツよりも効率が落ちるが、問題は解決するだろうと思う。 –

+0

私はなぜ質問が保留になったのか分かりません - それは私にとってかなり明確で具体的なようです。 –

関連する問題