2010-12-07 72 views
1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace _1DV402.S2.L04 
{ 
class SecretNumber 
{ 
    // Fields 
    private int _count; 
    private int _secretNumber; 
    public const int MaxNumberOfGuesses = 7; 

    public SecretNumber() 
    { 
     //_count = 0; 
     //_secretNumber = 0; 
     Initialize(); 
    } 

    public void Initialize() 
    { 
     // Randomize a number between 1-100. 
     Random random = new Random(); 
     int _secretNumber = random.Next(1, 101); 

     Console.WriteLine(_secretNumber); 
    } 

    public bool MakeGuess(int number) 
    { 
     if(number > _secretNumber) 
     { 
      _count++; 
      Console.WriteLine("{0} is too high. You have {1} guesses left", number, MaxNumberOfGuesses - _count); 

      return false; 
     } 
     else if (number < _secretNumber) 
     { 
      Console.WriteLine("{0} is too low. You have {1} guesses left", number, _count); 
      return false; 
     } 
     else 
     { 
      Console.WriteLine("Congratulations. You did it {0}.", _count); 
      return true; 
     } 
    } 
} 

}問題的隨機數在C#

而且我公司主營:

using System; 

namespace _1DV402.S2.L04 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     int number = 0; 
     SecretNumber secretNumber = new SecretNumber(); 

     Console.WriteLine(new String('*', 40)); 
     Console.Write("Gissar på 0 "); 
     Console.ForegroundColor = ConsoleColor.White; 
     Console.BackgroundColor = ConsoleColor.Red; 
     Console.WriteLine("(ska inte bli rätt!)"); 
     Console.ResetColor(); 
     secretNumber.MakeGuess(0); 
     Console.WriteLine(new String('*', 40)); 

     do 
     { 
      secretNumber.Initialize(); 
      Console.WriteLine("\nGissa ett tal mellan 1-100"); 
      for (int i = 1; i <= SecretNumber.MaxNumberOfGuesses; i++) 
      { 
       do 
       { 
        Console.Write("Gissning {0}: ", i); 
       } while (!int.TryParse(Console.ReadLine(), out number)); 

       if (secretNumber.MakeGuess(number)) 
       { 
        break; 
       } 
      } 
      Console.Write("Nytt hemligt nummer? [N] avbryter."); 
     } while (Console.ReadKey(true).Key != ConsoleKey.N); 
    } 
} 

}

我的問題是_secretNumber是百達0當我嘗試簽入我如果 - MakeGuess中的語句。

我該如何解決問題,使程序起作用?

回答

3

在初始化時,您將其聲明爲方法變量。這隻存在於該方法內部,並且優先於該字段(又名this._secretNumber)。

不是

// declares and assigns a method variable 
int _secretNumber = ... 

只需使用

// assigns the field 
_secretNumber = ... 
2

你再宣佈第二_secretNumber可變這裏,隱藏_secretNumber領域:

public void Initialize() 
{ 
    // Randomize a number between 1-100. 
    Random random = new Random(); 

    int _secretNumber = random.Next(1, 101); 
    // ^^^ 
    // Should be: 
    // _secretNumber = random.Next(1, 101); 

    Console.WriteLine(_secretNumber); 
} 
0

我不知道這可能編譯... 你聲明你的_secret號碼在您的Initialize()方法的範圍內,因此只要您完成初始化,該變量就會超出範圍。

你應該在你的類的範圍內聲明_secret數字作爲一個私人字段。

乾杯!

+1

所以你有它作爲一個字段,(它只是隱藏我的看法),然後在Initialize()方法中簡單地刪除_secretNumber前面的int – 2010-12-07 16:41:02