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

在您当前的代码中,变量DiceRoll是在函数中定义的DiceRoller(),而不是在函数中CreateInput()。这就是为什么你得到,The name DiceRoll does not exist in the current context.

我的建议

在您的函数中将返回类型从更改void为,并返回一个整数。intDiceRoller()

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

你的 DiceRoll 声明是在 DiceRoller() 函数中吗?如果是,那么该变量对于该特定函数是本地的,并且它不存在于它之外。

您可能应该从 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
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);
}

您还可以创建一个名为 RandomNumber 的静态变量,以便只需要创建一次种子:https ://stackoverflow.com/a/2466989

于 2012-06-12T19:28:10.907 回答
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 回答