Проблема со случайным числом в C # - PullRequest
1 голос
/ 07 декабря 2010
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;
        }
    }
}

}

И мой главный:

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, когда я пытаюсь проверить это в своих операторах if в MakeGuess.

как я могу решить проблему, чтобы программа работала?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

В Initialize вы объявляете его как переменную метода. Он существует только внутри метода и имеет приоритет над полем (он же this._secretNumber).

Вместо

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

Просто используйте

// assigns the field
_secretNumber = ...
2 голосов
/ 07 декабря 2010

Вы повторно объявляете вторую переменную _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 голосов
/ 07 декабря 2010

Интересно, как это могло скомпилироваться ... вы объявляете свой _secret номер в рамках вашего метода Initialize (), поэтому переменная выходит из области действия, как только вы закончите с инициализацией.* Вы должны объявить число _secret как личное поле в пределах области вашего класса.

Приветствия!

...