2010-08-02 67 views
0

無法弄清楚爲什麼我在標誌上收到錯誤。任何幫助將不勝感激! 的目標是使用下面指定的字符生成40個字符。使用未分配的本地變量'flag'

公共靜態字符串udidGen(){

 bool flag; 
     string s1 = ""; 
     string[] sArr2 = new string[] { 
             "0", 
             "1", 
             "2", 
             "3", 
             "4", 
             "5", 
             "6", 
             "7", 
             "8", 
             "9", 
             "a", 
             "b", 
             "c", 
             "d", 
             "e", 
             "f" }; 
     string[] sArr1 = sArr2; 
     Random random = new Random(); 
     int i = 0; 

     while (**flag**) 
     { 
      s1 += sArr1[random.Next(0, 15)]; 
      i++; 
      flag = i < 40; 
     } 
     return s1; 
    } 
+0

除了編碼風格的問題(追加一個字符串,環不清,不必要的陣列拷貝等),還有就是在這裏打破了另一件事 - 爲random.Next,第二個參數應該是16,不15. random.Next(0,16)會給你一個0到15之間的隨機數(不要問我爲什麼這麼做)。 – 2010-08-02 04:46:16

+1

此外,你的隨機變量應該被聲明爲一個靜態字段,並且只實例化一次(或者每次使用不同的種子實例化)。這將確保每次它調用「下一步」時它會給你隨機的東西,而不是每次都有相同的值。爲了演示,請嘗試連續10次進行此調用 - 您可能會連續多次獲得相同的結果。 – 2010-08-02 04:49:04

回答

2

您正在使用標誌不分配一個值。將第一行更改爲:

bool flag = true;

更好的是,擺脫 '標誌' 完全,並用替換while循環的for循環

對(INT I = 0;我< 40; i ++在) { ... }

+0

你打敗了我! – 2010-08-02 04:18:58

0

while第一次執行時,flag從來沒有被設置爲任何東西 - 感謝編譯器/運行庫爲您指出什麼可能已被證明是一個非常難以捉摸的錯誤!

你應該循環之前初始化變量true,最好在聲明本身:

bool flag = true; 
+0

我不明白這一點,布爾是一個值類型,所以有一個默認值爲false?剛剛有同樣的錯誤,它使我困惑 – DavidB 2015-09-10 13:49:47

+1

@DavidB,根據https://msdn.microsoft.com/en-us/library/83fhsxwc.aspx,「在C#中使用未初始化的變量是不允許的」 - 默認值沒有任何與案件做。 – 2015-09-10 17:45:31

+0

第一名 - 我昨天發現那篇文章。我以前從未注意過,感到很驚訝 – DavidB 2015-09-11 07:06:27

0

flag變量尚未初始化,這不是由C#編譯器允許的。在這種情況下,你想讓它成真,所以你至少進入循環一次。

bool flag = true; 
相關問題