4

割り当てで、入力エラーが発生したときにメソッド自体が呼び出されたため、手首を平手打ちしました。自分が書いたコードの代わりに、どのように、何を使うべきかわかりません。私はそれを行う方法について正しい方法を見つけるために助けが必要です。

私はコーディングが大好きなので、正しい方法で微調整する必要があります!:)

私が書いたコードはこんな感じです。

 private void SumTheNumbers()
 {
 Console.Write("Please give the value no "+ index + " :");
        if (false == int.TryParse(Console.ReadLine(), out num))
        { 
            //Errormessage if the user did not input an integer.
            Console.WriteLine("Your input is not valid, please try again.");
            Console.WriteLine();
            sum = 0;
            SumTheNumbers();
        }
        else
        {
            //Calculate the numbers given by user
            sum += num;
        }
  }
4

3 に答える 3

8

個人的にはそのスタイルが好きですが、非効率的です(ユーザーが無効な入力を何度も入力すると、スタックオーバーフローが発生する可能性があります)。あなたのインストラクターはおそらくあなたにwhileループを使用することを望んでいました:

Console.Write("Please give the value no "+ index + " :");
while (false == int.TryParse(Console.ReadLine(), out num))
{ 
    //Errormessage if the user did not input an integer.
    Console.WriteLine("Your input is not valid, please try again.");
    Console.WriteLine();
    sum = 0;
}

//Calculate the numbers given by user
sum += num;

ちなみに、そのfalse ==ビットは非常に非慣用的であり、ほとんどのチームで眉をひそめます(補足として:あなたのインストラクターがあなたにそれを書くようにアドバイスした場合、彼/彼女はおそらくそれが偶発的なものに対する保護である異なる言語の背景から来ています割り当て;私を信じてください、それはC#の土地では必要ではないか通常ではありません)。これはもっと典型的に見えます:

while (!int.TryParse(Console.ReadLine(), out num))
{
    // etc.
}
于 2012-07-10T17:37:05.057 に答える
7

これを実装する標準的な方法は、whileループを使用することです。

int num;
while (!int.TryParse(Console.ReadLine(), out num))
{
    Console.WriteLine("Your input is not valid, please try again.\n");
}
于 2012-07-10T17:36:35.027 に答える
1

whileループを使用します。

Console.Write("Please give the value no "+ index + " :");
while(!int.TryParse(Console.ReadLine(), out num))   //I find "!" easier to read then "false == "
{
    Console.WriteLine("Your input is not valid, please try again.");
    Console.WriteLine();
    Console.Write("Please give the value no "+ index + " :");
}

ここでは再帰の必要がないため、dowhileループの方が適しています。

于 2012-07-10T17:43:20.907 に答える