2010-12-07 11 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; 
     } 
    } 
} 

}problème avec nombre aléatoire en C#

Et mon principal:

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); 
    } 
} 

}

Mon problème est _secretNumber est AllWays 0 lorsque je tente de le vérifier dans mon si- déclarations dans MakeGuess. Comment puis-je résoudre le problème afin que le programme fonctionne?

Répondre

3

Dans Initialize, vous le déclarez comme variable de méthode. Cela n'existe que dans la méthode et a la priorité sur le champ (alias this._secretNumber).

Plutôt que

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

Il suffit d'utiliser

// assigns the field 
_secretNumber = ... 
2

Vous re-déclaration d'une deuxième variable ici _secretNumber, qui cache le champ _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

Je me demande comment cela pourrait-il compiler ... vous déclarez votre numéro de secret Dans le cadre de votre méthode Initialize(), la variable est hors de portée dès que vous avez terminé l'initialisation.

Vous devez déclarer le numéro _secret comme un champ privé, dans le cadre de votre classe.

À la votre!

+1

donc vous l'avez comme un champ, (il était juste caché de ma vue), puis supprimez simplement l'int devant _secretNumber dans la méthode Initialize() –