C#-随机数生成器错误

C#-随机数生成器错误,c#,C#,当我运行此程序并玩游戏时,每次只生成数字0。你能帮我找出问题所在吗 public partial class MainPage : PhoneApplicationPage { int numberguessed; // Constructor public MainPage() { InitializeComponent(); Random randnum = new Random(); int numbergue

当我运行此程序并玩游戏时,每次只生成数字0。你能帮我找出问题所在吗

public partial class MainPage : PhoneApplicationPage
{
    int numberguessed;
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        int numberguessed = randnum.Next(0,1000);
    }



    private void myButton_Click(object sender, RoutedEventArgs e)
    {
        myTextBlock.Text = " No worries ! Go again .. ";
        myTextbox.Text = "";
        myTextbox.Focus();
    }

    private void myButton2_Click(object sender, RoutedEventArgs e)
    {
        //string sval = myTextbox.Text;
        int ival = System.Convert.ToInt32(myTextbox.Text);
        if (ival == numberguessed)
            myTextBlock.Text = " You won ";
        else if (ival < numberguessed)
            myTextBlock.Text = "Your guess is too low !";
        else if (ival > numberguessed)
            myTextBlock.Text = "Your guess is too high !";
    }

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        myTextbox.Focus();
    }
public部分类主页:PhoneApplicationPage
{
整数;
//建造师
公共主页()
{
初始化组件();
Random randnum=新的Random();
int numberguessed=randnum.Next(01000);
}
私有无效myButton_单击(对象发送方,路由目标)
{
myTextBlock.Text=“别担心!再去..”;
myTextbox.Text=”“;
myTextbox.Focus();
}
私有无效myButton2\u单击(对象发送方,路由目标)
{
//字符串sval=myTextbox.Text;
int ival=System.Convert.ToInt32(myTextbox.Text);
如果(ival==numberguessed)
myTextBlock.Text=“你赢了”;
否则,如果(ivalnumberguessed)
myTextBlock.Text=“你的猜测太高了!”;
}
已加载专用void PhoneApplicationPage_(对象发送方,路由目标)
{
myTextbox.Focus();
}
本部分中的

public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        int numberguessed = randnum.Next(0,1000);
    }
您正在用“int”前缀覆盖顶级numberguessed变量。将其更改为:

public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        numberguessed = randnum.Next(0,1000);
    }
在这部分

public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        int numberguessed = randnum.Next(0,1000);
    }
您正在用“int”前缀覆盖顶级numberguessed变量。将其更改为:

public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        numberguessed = randnum.Next(0,1000);
    }

numberguessed
声明为
字段
,然后在
MainPage()
中重新声明一个新的局部变量
int numberguessed
。在其他方法中,将使用
字段
值。由于未初始化,它将具有int的默认值0

int numberguessed;
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            Random randnum = new Random();
            //remove int there like this
            //int numberguessed = randnum.Next(0,1000);
           numberguessed = randnum.Next(0,1000);
        }
顺便说一句,你应该有一个警告(或者可能只是resharper这么做了)说明这一点

局部变量numberguesed隐藏字段。MainPage.numberguesed


numberguessed
声明为
字段
,然后在
MainPage()
中重新声明一个新的局部变量
int numberguessed
。在其他方法中,将使用
字段
值。由于未初始化,它将具有int的默认值0

int numberguessed;
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            Random randnum = new Random();
            //remove int there like this
            //int numberguessed = randnum.Next(0,1000);
           numberguessed = randnum.Next(0,1000);
        }
顺便说一句,你应该有一个警告(或者可能只是resharper这么做了)说明这一点

局部变量numberguesed隐藏字段。MainPage.numberguesed

更改此部分

int numberguessed;
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        int numberguessed = randnum.Next(0,1000);
    }

问题在于,一旦您在类中声明了字段/属性,然后在构造函数中再次创建了一个类似的字段,声明为
int numberguessed
。后一个字段仅保留在构造函数中的范围内,并在构造函数结束后消失。但是,所有int f的默认值ield为0,您访问的字段是在类外定义的字段。因此,您只获得一个默认值。

更改此部分

int numberguessed;
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        Random randnum = new Random();
        int numberguessed = randnum.Next(0,1000);
    }


问题在于,一旦您在类中声明了字段/属性,然后在构造函数中再次创建了一个类似的字段,声明为
int numberguessed
。后一个字段仅保留在构造函数中的范围内,并在构造函数结束后消失。但是,所有int f的默认值ield为0,您访问的字段是在类外定义的字段。因此,您只获得一个默认值。

@DanielHilgarth我想我们应该彼此诚实!@DanielHilgarth我想我们应该彼此诚实!