2012-06-12 61 views
0

這裏是問題,在頂部我有公共無效的DiceRoller,它只是爲我獲得一個隨機數。那是int DiceRoll,這是我打電話來獲取號碼。在我的public void CreateInput()中,我調用了DiceRoll,它吐出該名稱在當前上下文中不存在。如果我將DiceRoller中的代碼複製到CreateInput中,它的工作原理是完美無瑕的,但是我希望在代碼中的其他類中擁有它。DiceRoll的名字在當前上下文中不存在

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(); 
    } 
+1

爲什麼要創建整個班級運行一行代碼? –

回答

1

在你當前代碼中,變量DiceRoll在功能DiceRoller()在功能CreateInput()定義。這就是爲什麼你得到的,The name DiceRoll does not exist in the current context.

我的建議

改變返回從voidintDiceRoller()函數類型,並返回一個整數。

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();  
} 

個人喜好:我喜歡定義的時候我打電話存取函數的局部變量。在這種情況下,我將首先定義一個局部變量(int random = DiceRoller();),然後將其寫入控制檯(Console.WriteLine(random);),而不是使用Console.WriteLine(DiceRoller())

0

DiceRoller()函數中是否聲明瞭DiceRoll?如果是,那麼該變量對於該特定函數是本地的,並且它不在其外部。

您可能應該從DiceRoller()返回DiceRoll並將其傳遞給CreateInput()。

0

DiceRoll是沒有變數,它似乎不是一個常數。它沒有定義。

0

嘗試從DiceRoller()返回一個值。

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

Console.Write(DiceRoller()); 
+2

'DiceRoller()'方法無效。 –

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(); 
    } 
} 
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

相關問題