2017-01-08 9 views
-1
public class MathProblem 
{ 
    public virtual void setproblem() 
    { 
     Random random = new Random(); 
     int num1 = random.Next(100); 
     int num2 = random.Next(100); 
     int sum = num1 + num2; 
    } 

    public virtual void askuserforanswer() 
    { 
     int answer; 

     Console.WriteLine("Enter your answer"); 
     answer = Convert.ToInt32(Console.ReadLine()); 
    } 

    public virtual void displayproblem() 
    { 

     Console.WriteLine(num1.ToString() + " + " + num2.ToString() + " = ?"); 

    } 

} 

に別の方法で変数を呼び出すことができますどのように。私はそれをどうやって行うのか分かりません。C#の - 私は同じクラスIは、<strong>setproblemから</strong>と<strong>NUM2</strong></strong>方法方法</strong> displayproblem <strong>に<strong>num1を呼び出したい

助けてください...

+1

これらはメソッド内で宣言されているため、_local_変数です。メソッドが終了すると、メソッドが破棄され、メソッド外では使用できなくなります。機能に到達するには、クラスのグローバルスコープで宣言する必要があります。 [C#のスコープに関するチュートリアル]をよくお読みください(https://msdn.microsoft.com/en-us/library/ms973875.aspx) – Steve

+0

メソッド名をもっと明確にするために、私はそれらをいわゆるCamelCasingに変更します。 SetProblem、AskUserForAnswer、DisplayProblem)。 –

答えて

2

できません。メソッド内で宣言された変数は、そのメソッド内でのみ使用できます。あなたはクラスレベルでそれらを宣言する必要がありますクラス全体でそれらを使用できるようにするには:、

public class MathProblem 
{ 
    private Random random = new Random(); 
    private int num1, num2, sum; 

    public virtual void SetProblem() 
    { 
     num1 = random.Next(100); 
     num2 = random.Next(100); 
     sum = num1 + num2; 
    } 

    public virtual void AskUserForAnswer() 
    { 
     int answer; 

     Console.WriteLine("Enter your answer"); 
     answer = Convert.ToInt32(Console.ReadLine()); 
    } 

    public virtual void DisplayProblem() 
    { 

     Console.WriteLine(num1.ToString() + " + " + num2.ToString() + " = ?"); 

    }  
} 

また、私はあなたがフィールドを使用する必要があり、MicrosoftのCapitalization Conventions.

+0

今回は常にnum1に0を、num2には0 + 0を常に求めます – Uggsen

+0

'SetProblem'メソッドを呼び出していますか? –

0

に応じパスカルケーシングにメソッド名を変更した注意。

public class MathProblem 
{ 
int num1; 
int num2; 

public virtual void setproblem() 
{ 
    Random random = new Random(); 
    num1 = random.Next(100); 
    num2 = random.Next(100); 
    int sum = num1 + num2; 
} 

public virtual void askuserforanswer() 
{ 
    int answer; 

    Console.WriteLine("Enter your answer"); 
    answer = Convert.ToInt32(Console.ReadLine()); 
} 

public virtual void displayproblem() 
{ 

    Console.WriteLine(num1.ToString() + " + " + num2.ToString() + " = ?"); 

} 

}

0

あなたはクラスレベルでのようなフィールドを使用することができます。

public class MathProblem 
{ 
    int num1; 
    int num2; 

    ... rest of code unchanged 
} 

あなたはクラスの外にこれらを必要とする場合は以下のようにプロパティを使用することができます。

public class MathProblem 
{ 
    public int num1 { get; private set;} 
    public int num2 { get; private set;} 

    ... rest of code unchanged 
} 

かあなたがクラス外からそれらを設定できるようにしたい場合:

また
public class MathProblem 
{ 
    public int num1 { get; set;} 
    public int num2 { get; set;} 

    ... rest of code unchanged 
} 

いくつかのヒント:使用してプロパティがcamelCasing形式を使用する場合

  • (例えばnum1ではなくnum1)
  • もCamelCasingでメソッド名を変更します(例:SetProblem、AskUserForAnswer、DisplayProblem)。
関連する問題

 関連する問題