1

これを実行してゲームをプレイすると、毎回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();
    }
4

3 に答える 3

4

この部分で

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);
    }
于 2013-09-13T08:55:58.870 に答える
4

numberguessedとして宣言し、fieldで新しいローカル変数int numberguessedを再宣言しMainPage()ます。他のメソッドでは、field値が使用されます。初期化されていないため、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);
        }

ちなみに、次のような警告が表示されるはずです(または、それを行うだけでよりシャープになる可能性があります)。

ローカル変数 numberguessed はフィールドを隠します .MainPage.numberguessed

于 2013-09-13T08:56:29.993 に答える
0

この部分を変更

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

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

int numberguessed問題は、クラスでフィールド/プロパティを宣言してから、コンストラクター内で再度宣言して同様のフィールドを作成するという事実です。この後者のフィールドは、コンストラクター内のスコープにのみ残り、コンストラクターが終了すると消滅します。ただし、すべての int フィールドのデフォルト値は 0 であり、アクセスしているフィールドはクラスの外側で定義されたフィールドです。したがって、デフォルト値のみを取得しています。

于 2013-09-13T09:14:29.800 に答える