C#을

2010-12-07 3 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#을

에서 임의의 숫자와 문제 그리고 내 홈페이지 : 난 내 IF-에서 그것을 확인하려고 할 때

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이다가에 allways 0 MakeGuess의 문장.

어떻게 프로그램을 작동시킬 수 있습니까?

답변

3

초기화에서이를 메소드 변수로 선언합니다. 이것은 메소드 내부에만 존재하며 필드 (일명 this._secretNumber)보다 우선합니다.

오히려

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

보다 그냥 사용 당신은 _secretNumber 필드 숨 깁니다 여기에 두 번째 _secretNumber 변수를 다시 선언하고

// assigns the field 
_secretNumber = ... 
2

:

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를 간단히 제거하십시오 –

관련 문제