2010-12-07 48 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