2016-05-28 16 views
0

現在、IF ELSEステートメントを使用して正しく実行したと思った演習を行っていますが、一度提出すれば、WHILEループまたはDO-WHILEループを使用するよう指示されました。あなたはWHILEループをどこで使用したのかわかりますが、それは私に割り当てられたエラーメッセージの無限ループを与えています。私はそれを止める方法を知らないのです!このWHILEループを動作させるにはどうすればよいですか?

static void Main(string[] args) 
    { 
     decimal hours; 
     const decimal HOURLY_RATE = 2.5m; 
     const decimal MAX_FEE = 20.00m; 
     Console.WriteLine("Enter the amount of hours parked:"); 
     hours = decimal.Parse(Console.ReadLine()); 
     decimal parkingCost = hours * HOURLY_RATE; 

     while (hours < 1 || hours > 24) 
     { 
      Console.Write("Enter correct amount of hours - 1 to 24. "); 
     } 

     if (parkingCost > MAX_FEE) 
     { 
      Console.Write("Total fee is $" + MAX_FEE); 
      Console.WriteLine(" Time parked in hours is " + hours); 
     } 
     else 
     { 
      parkingCost = hours * HOURLY_RATE; 
      Console.WriteLine("The cost of parking is " + parkingCost.ToString("C")); 
      Console.WriteLine("Time parked in hours is " + hours); 
     } 
     Console.WriteLine("Press any key to continue..."); 
     Console.ReadKey(); 
    } 
} 

だから、アイデアは、「時間の正確な量を入力 - 24に1を」するために私が欲しいということであるユーザーはプログラムが行きそうでない場合のために、24未満1以上の数値を入力した場合に表示しますIFとELSEステートメントを先に進めてください。

+2

ReadKey以下に示すように、whileループ内の入力を受け付ける行を追加し、数値として、および1~24の間で入力した文字を確認してください。そうであれば、「中断する」。 – DonBoitnott

+0

無効なエントリをユーザーが修正できるようにする必要があります。もう一つの 'Console.ReadLine()'をwhileループ内で 'hours'の新しいバージョンを収集するようにしてください。そうしないと、最初のエラーで永遠にループします。 –

+0

ありがとうジョン。私は以下の答えでコードを追加しましたが、私は新しい問題が発生しました。このwhileループは、あなたが働いた驚異を一点まで提供しました。私が間違った時間を入力すると、25とし、正確な時間を入力するように指示します。その時点で、入力はすべてMAX_FEE($ 20)の回答を提供します。その周りに道がありますか? - – purplemonkeydishwasher

答えて

0

ちょうど

static void Main(string[] args) 
{ 
    decimal hours; 
    const decimal HOURLY_RATE = 2.5m; 
    const decimal MAX_FEE = 20.00m; 
    Console.WriteLine("Enter the amount of hours parked:"); 
    hours = decimal.Parse(Console.ReadLine()); 
    decimal parkingCost = hours * HOURLY_RATE; 

    while (hours < 1 || hours > 24) 
    { 
     Console.Write("Enter correct amount of hours - 1 to 24. "); 
     hours = decimal.Parse(Console.ReadLine()); 
    } 


    parkingCost = hours * HOURLY_RATE; // to recalculate 

    if (parkingCost > MAX_FEE) 
    { 
     Console.Write("Total fee is $" + MAX_FEE); 
     Console.WriteLine(" Time parked in hours is " + hours); 
    } 
    else 
    { 
     parkingCost = hours * HOURLY_RATE; 
     Console.WriteLine("The cost of parking is " + parkingCost.ToString("C")); 
     Console.WriteLine("Time parked in hours is " + hours); 
    } 
    Console.WriteLine("Press any key to continue..."); 
    Console.ReadKey(); 
} 

}ループ内

+0

これは完璧です、あなたは非常にライトアップありがとう! – purplemonkeydishwasher

0

あなたは、新しい値を取得するために、再度、whileループ内の値を読み込むのを忘れて:あなたはエラー

do { 
    Console.WriteLine("Enter the amount of hours parked:"); 
    try{ 
    hours = decimal.Parse(Console.ReadLine()); 
    if(hours <1 || hours > 24) 
     Console.Write("Enter correct amount of hours - 1 to 24. "); 
    } 
    catch { Console.WriteLine("Please enter a valid numeric value"); } 
} while(hours < 1 || hours > 24); 
上の最初の読み取りおよびループのみを取り除くことができますが

while (hours < 1 || hours > 24) 
    { 
     Console.Write("Enter correct amount of hours - 1 to 24. "); 
     Console.WriteLine("Enter the amount of hours parked:"); 
     hours = decimal.Parse(Console.ReadLine()); 
    } 

または実行などを

try catchを追加しました。数値ではない値を入力するとエラーが発生する可能性があるためです。

+0

これはwhileループで、驚異的な出来事を1ポイントまで提供しました。私が間違った時間を入力すると、25とし、正確な時間を入力するように指示します。その時点で、入力はすべてMAX_FEE($ 20)の回答を提供します。その周りに道がありますか? – purplemonkeydishwasher

+0

@LegendIsReal 'hours'を解析した後、' parkingCost'を計算してください。 'decimal parkingCost = hours * HOURLY_RATE;' 'do-while'ループの" after "と" outside "を移動してください –

+0

まさにパオロが言ったこと。 whileループの後に計算を移動 – MiltoxBeyond

関連する問題