2012-11-10 72 views
-1

我試着寫一個洗牌字符串數組算法中,但我得到一個空引用錯誤。我想不通爲什麼..我的shuffle字符串[]不工作?

public static string[] arrRandomized; 
public static string[] ShuffleWords(string[] Words) 
{ 
    Random generator = new Random(); 
    for (int i=0;i < Words.Length; i++) { 
     int pos = generator.Next(Words.Length); 
     Console.WriteLine(Words[pos]); // I SEE RANDOM ITEM 
     Console.Read(); // NULL REFERENCE ERROR AFTER THIS 
     if (Words[pos] != null) 
     { 
      arrRandomized[i] = Words[pos]; 
      //remove item at pos so I get no duplicates 
      Words[pos] = null; 
     } 
    } 

我不想使用ArrayList,我有我的理由,但這就是題外話我只是想知道怎麼來的,這是不工作:/感謝

+1

你在哪裏使用Console.Read()? –

+0

在迭代時更改集合(或數組)是不可取的。 – Oded

+6

*「我找不出原因......」* **調試它。** – Adam

回答

3

我想你應該初始化arrRandomized

arrRandomized = new string[Words.Length]; 
0

你arrRandomized從未intialized。我還建議你返回一個數組,而不是使用靜態引用,因爲隨後對該方法的調用將改變對arrRandomized的所有引用。

public static string[] ShuffleWords(string[] Words) 
{  
    string[] arrRandomized = new string[Words.Length]; 
    Random generator = new Random(); 
    for (int i=0;i < Words.Length; i++) 
    { 
     int pos = generator.Next(Words.Length); 
     Console.WriteLine(Words[pos]); // I SEE RANDOM ITEM 
     Console.Read(); // NULL REFERENCE ERROR AFTER THIS 
     if (Words[pos] != null) 
     { 
      arrRandomized[i] = Words[pos]; 
      //remove item at pos so I get no duplicates 
      Words[pos] = null; 
     } 
    } 
    return arrRandomized; 
} 
+0

擺脫了錯誤,但現在返回數組只有2個項目,而不是4 ..其他2在那裏,但空:/ – ace007

+0

以及我得到它的工作.. – ace007