2016-05-11 14 views
-1

以下のコードにはいくつか問題があります。私はまだ学んでいるし、それを修正する方法がわからない。C#でメソッドを使用して変数を格納する方法は?

1.私がしようとしているのは、私のメインメソッドに入る2番目のメソッド(GetTrack)でしようとしているような変数を格納するメソッド(GetInt)を作成することです。無効な入力をtheresの、私はのtry/catchとブールブツ

に何か問題があると推測しているとき

2-Iは、ループにgetIntメソッドを取得することはできません

//Get int Method 
static public void GetInt(string sPrompt, int iMin, int iMax) 
{ 
    int iNum; 
    bool bError = false; 

    do 
    { 
     bError = true; 
     try 
     { 
      Console.Write(sPrompt); 
      iNum = int.Parse(Console.ReadLine()); 
      if ((iNum < iMin) || (iNum > iMax)) 
      { 
       Console.WriteLine("The value is out of range."); 
       bError = true; 
      } 
     } 
     catch (ArgumentException) 
     { 
      Console.WriteLine("An invalid number was entered, please try again."); 
      bError = true; 
     } 
    } 
    while (bError == false); 
} 

//Get Track Method 
static public void GetTrack() 
{ 
    int iMin; 
    int iSec; 

    iMin = GetInt("Enter the minutes: ", 0, 10); 
    iSec = GetInt("Enter the seconds: ", 0, 59); 
} 
+0

に合わせて変更さ

 string choice = string.Empty; bool goodChoice = false; while (!goodChoice) { Console.Clear(); Console.WriteLine(string.Empty); Console.WriteLine("Do you really want to hurt me?"); Console.WriteLine(string.Empty); Console.WriteLine(string.Empty); Console.WriteLine("Please Y or N (or 0 to exit)"); choice = Console.ReadLine().Trim(); if (choice.Equals("Y", StringComparison.OrdinalIgnoreCase)) { goodChoice = true; } if (choice.Equals("N", StringComparison.OrdinalIgnoreCase)) { goodChoice = true; } if (choice.Equals("0")) { goodChoice = true; return; /* exist the routine */ } } 

は 'void'ボイド何方法を行う上で迅速なGoogle検索を行います。.. 'return values 'に関して – MethodMan

+0

' try'は 'iNum = int.Parse(Console.ReadLine());'をラップするだけで、他の例外を捕まえることはできません。たとえば 'sPrompt'が' null'の場合、 'Console.Write'は例外をスローしますが、あなたのプログラムはその例外を単に捕らえて、数字が有効であっても"無効な番号、再試行 "と言うでしょう、それは' sPrompt'です。それは無効です。 – Quantic

答えて

6
ありがとう

GetIntの直前にbErrorをtrueに設定します。これはおそらく偽であるはずですので、実際にはループしません。なぜなら、どこにも偽に設定するからです。

また、メソッドから何も返さないので、何も戻ってきません。 intを返すようにメソッドを変更し、取得したときに実際に値を返す必要があります。

+0

私もこれを見つけました! –

0

あなたGetIntメソッドの宣言は、次のように変更します。

//Get int Method 
static public int GetInt(string sPrompt, int iMin, int iMax) 

があなたのDO ... whileループの先頭からbError = true;文を削除します。ループは、次のステートメントを追加しながら、あなたの行った後 は...:

また
return iNum; 

、あなたのwhile条件はbError == falseからbError == trueまたは単にbErrorに変更する必要があり、同じことを意味し、あなたの意図はしている場合入力が受け入れられるまでユーザにプロンプ​​トを表示し続けます。ここで

0

は、私は、コンソールからのユーザ入力を「取得」する方法である:あなたのケース

  string choice = string.Empty; 
      bool goodChoice = false; 

      while (!goodChoice) 
      { 
       Console.Clear(); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine("Enter an Integer between {0} and {1}", minValue, maxValue); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine("Please enter an integer (or X to exit)"); 
       choice = Console.ReadLine().Trim(); 

       int intParseResult = 0; 
       bool intParseAttempt = int.TryParse(choice, out intParseResult); 
       if(!intParseAttempt) 
       { 
        goodChoice = false; 
       } 
       else 
       { 
         if ((intParseResult < minValue) || (intParseResult > maxValue)) 
         { 
             Console.WriteLine("Out of Range"); 
         } 
         else 
         { 
          goodChoice = true; 
         } 
       } 

       if (choice.Equals("X")) 
       { 
        goodChoice = true; 
        return -99999; /* you'll have to figure out how to handle exits on your own */ 
       } 
      } 
+0

PS、ハンガリー表記を削除してください。それはMacarenaと一緒に出かけた。 (例:iNum、iMax) – granadaCoder

関連する問題