2016-12-26 30 views
1

我正在使用Visual Studio。 我有一個20個字段的int數組,我有一個for-loop運行20次來填寫所有列。它插入生成的隨機數,while循環也會查看該數組中是否存在隨機數,如果是,則會創建一個新隨機數並再次運行while循環,直到for循環完成。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

您的程序中必須有一些代碼沒有顯示給我們,因爲現在,外循環將在每次迭代時立即退出while循環。另一方面,如果輸入數組包含所有整數0到19,那麼while循環將永遠不會終止。

它看起來像你試圖實現的是​​。這需要一個數組作爲輸入,並隨機排列其順序。

+1

由於數組默認情況下包含所有0,那麼最終的嘗試將永遠不會找到值不存在於數組中。從1到19包含20個獨特的數字。 –

+0

我給了幾個回覆,但因爲我在說垃圾而刪除了它們。是的,看起來這是無限循環的原因。我懷疑將迭代次數改爲19也會解決這個問題,但它的效率明顯低於Fisher-Yates。 –

+0

我不確定爲什麼這個問題被擱置了 - 這對我來說似乎相當清楚和具體。 –