0

私は C# を学習していますが、単純なコンソール プログラムで変数のスコープに問題があります。

以前にインスタンス化された変数を参照しようとすると問題が発生することを除いて、プログラムはこれまでのところ完全に実行されます。

メソッドを静的から非静的に変更しようとしましたが、パブリック/プライベート アクセスも適用しましたが、役に立ちませんでした。

正しい方向へのナッジが必要なだけです。誰かが助けてくれることを願っています!

私が得ているエラーメッセージは次のとおりです。

エラー 1 非静的フィールド、メソッド、またはプロパティ 'ConsoleApplication2.Program.game()' にはオブジェクト参照が必要です

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    public class Program
    {
        int numberToGuess;
        int numberGuessed;
        int triesRemaining;

        public void game()
        {
            Console.WriteLine("           ==Welcome to Guess My Number== \n");
            Console.WriteLine("Player 1: Please enter your number to guess between 1 and 20: \n");
            numberToGuess = int.Parse(Console.ReadLine());
            Console.WriteLine("Player 2, please enter your first guess, you have 7 tries: \n");
            numberGuessed = int.Parse(Console.ReadLine());

            if (numberGuessed == numberToGuess)
            {
                correct();
            }
            else
            {
                incorrect();
            }

        }

        public void correct()
        {
            Console.WriteLine("Congratulations, the number was in fact " + numberToGuess);
        }

        public void incorrect()
        {

        }


        static void  Main(string[] args)
        {
            game();            
        }
    }
}
4

3 に答える 3

0

staticメソッド/フィールドは、インスタンスではなく、ユーザー定義型に属します。

たとえば、次のコードを見ると:

public class MyClass
{
    public static void Foo()
    {
    }
}

メソッドは、Foo()のインスタンスからアクセスされませんMyClass。であるためstatic、ユーザー定義型自体からアクセスします。元:

public class Program
{
    static void Main(String[] args)
    {
        MyClass.Foo();
    }
}

Main()isであるためstatic、その中の静的メソッドまたは変数のみを参照できます (これにより、ローカル インスタンス変数から参照されるメソッドは除外されます)。

あなたのコードでは、game()ゲームによって呼び出される/呼び出されるメソッドとフィールド/メソッドは ではないstaticため、オブジェクト インスタンスを介してのみアクセスできます。もちろん、作成game()および他のすべてのフィールド/メソッドstaticは、コードの作業部分になります。

型の詳細については、http static: //msdn.microsoft.com/en-us/library/98f28cdx.aspxを参照してください。

于 2013-09-18T01:12:15.250 に答える
0

私はメソッドを完成させ続けましたが、うまく機能しているようです!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

 namespace ConsoleApplication2
{
public class Program
{
    int numberToGuess;
    int numberGuessed;
    int triesRemaining = 7;
    string playAgain;
    string player1, player2;

    public void game()                                                                                                              //Initiates the game instance
        {
            Console.WriteLine("           ==Welcome to Guess My Number== \n");
            Console.WriteLine(" Player 1, Please enter your name: \n");
            player1 = Console.ReadLine();
            Console.Clear();
            Console.WriteLine("                      ==Guess My Number== \n");
            Console.WriteLine("Hello " + player1 + " : Please enter your number to guess between 1 and 20: \n");
            numberToGuess = int.Parse(Console.ReadLine());
            Console.Clear();
            Console.WriteLine("           ==Guess My Number== \n");
            Console.WriteLine(" Player 2, Please enter your name: \n");
            player2 = Console.ReadLine();
            Console.Clear();
            Console.WriteLine("Hello " + player2 + " please enter your first guess, you have 7 tries: \n");
            numberGuessed = int.Parse(Console.ReadLine());

            if (numberGuessed == numberToGuess)
            {
                Console.WriteLine("Congratulations, the number was in fact " + numberToGuess);
                newGame();
            }
            else
            {
                incorrect();
            }

        }

    public void incorrect()                                                                                                         //Method for dealing with incorrect answers
    {
        for (int x = 0; x < 6; x++)
        {
            triesRemaining--;
            Console.WriteLine("Incorrect, you have " + triesRemaining + " tries remaining \n");
            Console.WriteLine(player2 + ", please enter your next guess: \n");
            numberGuessed = int.Parse(Console.ReadLine());

            if (numberGuessed == numberToGuess)
            {
                Console.WriteLine("Congratulations, the number was in fact " + numberToGuess);
                newGame();
            }
            else { 
                //Do nothing
            }

        }

        Console.WriteLine("You have used up all your tries! You have failed. The number was: " +numberToGuess + "\n");
        newGame();
    }                                                      //Method for dealing with incorrect answers

    public void newGame()                                                                                                           //Method that gives the user the option to start a new game instance
    {
        Console.WriteLine("Would you like to play again? Type yes or no: \n");
        playAgain = Console.ReadLine();
        playAgain = playAgain.ToLower();
        if (playAgain == "yes")
        {
            Console.Clear();
            game();
        }
        else if (playAgain == "y")
        {
            game();
        }
        else
        {
            //Do nothing
        }
    }                                                        

   static void  Main(string[] args)
    {
        new Program().game();

    }
}
}
于 2013-09-18T01:48:37.253 に答える