【问题标题】:Problem with random number in C#C#中的随机数问题
【发布时间】:2011-05-21 17:09:57
【问题描述】:
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);
    }
}

}

当我尝试在 MakeGuess 的 if 语句中检查它时,我的问题是 _secretNumber 始终为 0。

我怎样才能解决这个问题,让程序正常工作?

【问题讨论】:

    标签: c# random numbers


    【解决方案1】:

    在 Initialize 中,您将其声明为方法变量。这仅存在于方法内部,并且优先于字段(又名 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);
      }
      

      【讨论】:

        【解决方案3】:

        我想知道这怎么可能编译... 您在 Initialize() 方法的范围内声明您的 _secret 编号,因此一旦您完成初始化,变量就会超出范围。

        您应该在您的班级范围内将 _secret 号声明为私有字段。

        干杯!

        【讨论】:

        • 所以你将它作为一个字段,(它只是从我的视图中隐藏),然后只需在 Initialize() 方法中删除 _secretNumber 前面的 int
        猜你喜欢
        • 2012-04-13
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 2012-09-16
        • 2017-04-10
        • 1970-01-01
        相关资源
        最近更新 更多