2017-09-30 12 views
2

私はハングマンゲームに取り組んでいますが、デバッグで毎回guessIndexが数字を生成しているにもかかわらず、words配列から単語を選びません。私はデバッグして、私は100%が数字を作成することを知っていますが、currentWordはまだnullです。誰でもこれを解決するのに役立つことができますC#無作為にWordが選択できない

namespace Guess_The_Word 
{ 

    public partial class Form1 : Form 
    { 
     private int wrongGuesses = 0; 
     private int userGuesses; 
     private string secretWord = String.Empty; 
     private string[] words; 
     private string currentWord = string.Empty; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      LoadWords(); 
      setUpWords(); 

     } 

     private void guessBtn_Click(object sender, EventArgs e) 
     { 

      wrongGuesses++; 
      if (wrongGuesses <= 0) 
      { 
       MessageBox.Show("You have lost! The currect word was {0}", currentWord); 
      } 
     } 

     private void LoadWords() 
     { 

      string path = (@"C:\commonwords.txt"); // Save the variable path with the path to the txt file 
      string[] readText = File.ReadAllLines(path); 
      words = new string[readText.Length]; 
     } 

     private void setUpWords() 
     { 
      wrongGuesses = 0; 
      int guessIndex = (new Random()).Next(words.Length); 
      currentWord = words[guessIndex]; 
      userGuesses = currentWord.Length; 

     } 
     private void ResetGame() 
     { 

      //.Show("You have {0} guesses for this word, guess three in a row to win!"); 
     } 

     private void resetGamebtn_Click(object sender, EventArgs e) 
     { 
      LoadWords(); 

     } 
    } 
} 

私は System.NullReferenceExceptionを取得:「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」このライン

words = new string[readText.Length]; 

readText.Length長のnull文字列の配列を作成します。ライン58

+1

新しい乱数が必要になるたびに、新しいランダムインスタンスを作成しないでください。新しい乱数値が必要な場合は、単一の 'Random'インスタンスを作成して再利用する必要があります。 – Michael

+1

Line 58 ...ここに梁番号がないので特別に知っていると便利です... – rene

答えて

2

問題で

は、あなたのLoadWords方法です。

private void LoadWords() { 
    string path = @"C:\commonwords.txt"; 
    words = File.ReadAllLines(path); 
} 

今すぐwordsC:\commonwords.txtファイルからstring null以外のオブジェクトの配列が含まれます:あなたは、次のようにメソッドを書き換える必要があります。

+0

私は新しい文字列を言ったのでnullの配列を作成していましたか?乾杯! –

+1

@LiamVallance新しい配列を作成すると、その要素は配列要素の型のデフォルト値に初期化されます。 'string'と他の参照型の場合、デフォルト値は' null'です。 – dasblinkenlight