0

ここに問題があります。上部に public void DiceRoller があり、これは単に乱数を取得します。その下にあるのはint DiceRoll、番号を取得するために私が呼​​び出すものです。私public void CreateInput()は DiceRoll を呼び出し、その名前が現在のコンテキストに存在しないことを吐き出します。コードを DiceRoller から CreateInput にコピーすると問題なく動作しますが、自分のコード内の他のクラス用に独自のクラスにしたいと考えています。

    public void DiceRoller()
    {
        Random RandomNumber = new Random();
        int DiceRoll = RandomNumber.Next(1, 20);
    }

    public void CreateInput()
    {
        Console.Clear();
        Console.WriteLine("  _, __, __,  _, ___ __,    _, _,_  _, __,  _,  _, ___ __, __,");
        Console.WriteLine(" / ` |_) |_  /_\\  |  |_    / ` |_| /_\\ |_) /_\\ / `  |  |_  |_)");
        Console.WriteLine(" \\ , | \\ |   | |  |  |     \\ , | | | | | \\ | | \\ ,  |  |   | \\");
        Console.WriteLine("  ~  ~ ~ ~~~ ~ ~  ~  ~~~    ~  ~ ~ ~ ~ ~ ~ ~ ~  ~   ~  ~~~ ~ ~");
        Console.WriteLine("<==============================================================>");
        Console.WriteLine();
        Console.WriteLine();
        Console.Write("Player Name: ");
        Console.ReadLine();
        Console.Write("Select Race: ");
        Console.ReadLine();
        Console.Write("Select Class: ");
        Console.ReadLine();
        Console.WriteLine("Stats: ");
        Console.Write("STR: ");
        Console.Write(DiceRoll);
        Console.ReadLine();
    }
4

6 に答える 6

1

現在のコードでは、変数は functionではなく functionDiceRollで定義されています。これがあなたが得る理由です、DiceRoller()CreateInput()The name DiceRoll does not exist in the current context.

私のおすすめ

関数で戻り値の型を から に変更voidし、整数を返しintます。DiceRoller()

public int DiceRoller()     
{         
    Random randomNumber = new Random();         
    int diceRoll = randomNumber.Next(1, 20);
    return diceRoll;
} 

DiceRoller()次に、関数内で関数を呼び出して、CreateInput()以下に示すようにランダムな整数を取得します。

public void CreateInput()     
{         
    Console.Clear();         
    Console.WriteLine("  _, __, __,  _, ___ __,    _, _,_  _, __,  _,  _, ___ __, __,");         
    Console.WriteLine(" / ` |_) |_  /_\\  |  |_    / ` |_| /_\\ |_) /_\\ / `  |  |_  |_)");          
    Console.WriteLine(" \\ , | \\ |   | |  |  |     \\ , | | | | | \\ | | \\ ,  |  |   | \\");         
    Console.WriteLine("  ~  ~ ~ ~~~ ~ ~  ~  ~~~    ~  ~ ~ ~ ~ ~ ~ ~ ~  ~   ~  ~~~ ~ ~");         
    Console.WriteLine("<==============================================================>");     
    Console.WriteLine();         
    Console.WriteLine();         
    Console.Write("Player Name: ");        
    Console.ReadLine();        
    Console.Write("Select Race: ");         
    Console.ReadLine();        
    Console.Write("Select Class: ");         
    Console.ReadLine();         
    Console.WriteLine("Stats: ");         
    Console.Write("STR: ");         
    Console.Write(DiceRoller());         
    Console.ReadLine();     
} 

個人的な好み: アクセサー関数を呼び出すときに、ローカル変数を定義するのが好きです。この場合、 を使用する代わりに、Console.WriteLine(DiceRoller())最初にローカル変数を定義し ( int random = DiceRoller();)、それをコンソールに書き込みます ( Console.WriteLine(random);)。

于 2012-06-12T19:01:07.140 に答える
0
public void DiceRoller() 
{ 
    Random RandomNumber = new Random(); 
    int DiceRoll = RandomNumber.Next(1, 20); 
} 

ここで起こっていることは、DiceRoller() メソッドを終了した瞬間に、すべてのローカル変数がスタックからポップされ、対応するすべてのデータが失われるということです。あなたがする必要があるのは、上記の関数を次のようなものに変えることです:

public int DiceRoller() 
{
    Random RandomNumber = new Random();
    return RandomNumber.Next(1,20);
}

シードを 1 回だけ作成する必要があるように、RandomNumber という静的変数を作成することもできます: https://stackoverflow.com/a/2466989

于 2012-06-12T19:28:10.907 に答える
0

関数 DiceRoller() 内に DiceRoll の宣言がありますか? そうである場合、その変数はその特定の関数に対してローカルであり、その外部には存在しません。

おそらく、DiceRoller() から DiceRoll を返し、それを CreateInput() に渡す必要があります。

于 2012-06-12T19:01:13.930 に答える
0

DiceRoll変数ではなく、定数ではないようです。未定義です。

于 2012-06-12T19:01:23.667 に答える
0

DiceRoller() から値を返してみてください。

public int DiceRoller()
{
     Random RandomNumber = new Random();
     return RandomNumber.Next(1, 20);
}

Console.Write(DiceRoller());
于 2012-06-12T19:03:40.747 に答える
0
class DiceRoller
{
    int DiceRoll = 0;
    Random RandomNumber = new Random();

    public DiceRoller()
    {
       int DiceRoll = RandomNumber.Next(1, 20);
    }

   public int getDiceRoll()
   {
      return DiceRoll;
   }
}

クラス CreateInput() 内でインスタンスをDiceRoller持ち、get メソッドを呼び出します

class SomeClass
{
     DiceRoller dr;

    public SomeClass()
    {
        DiceRoller dr = new DiceRoller();
    }  

    public void CreateInput()
    {
            Console.Clear();
            Console.WriteLine("  _, __, __,  _, ___ __,    _, _,_  _, __,  _,  _, ___ __, __,");
            Console.WriteLine(" / ` |_) |_  /_\\  |  |_    / ` |_| /_\\ |_) /_\\ / `  |  |_  |_)");
            Console.WriteLine(" \\ , | \\ |   | |  |  |     \\ , | | | | | \\ | | \\ ,  |  |   | \\");
            Console.WriteLine("  ~  ~ ~ ~~~ ~ ~  ~  ~~~    ~  ~ ~ ~ ~ ~ ~ ~ ~  ~   ~  ~~~ ~ ~");
            Console.WriteLine("<==============================================================>");
            Console.WriteLine();
            Console.WriteLine();
            Console.Write("Player Name: ");
            Console.ReadLine();
            Console.Write("Select Race: ");
            Console.ReadLine();
            Console.Write("Select Class: ");
            Console.ReadLine();
            Console.WriteLine("Stats: ");
            Console.Write("STR: ");
            Console.Write(dr.getDiceRoll());
            Console.ReadLine();
     }
}
于 2012-06-12T19:13:18.713 に答える