Я думаю, вам просто нужно это:
do
{
Console.WriteLine("Please enter your total time parked in hours: Eg 1.5 or 3.0");
parkTime = decimal.Parse(Console.ReadLine());
if (parkTime < 1 || parkTime > 24)
{
Console.WriteLine("Error – Park Time out of range");
}
}
while (parkTime < 1 || parkTime > 24);
if (parkTime > 8)
{
Console.Write("Total fee is $" + MAX_FEE);
}
else
{
parkFee = Math.Ceiling(parkTime) * HOURLY_RATE;
Console.Write("Parking Fee = $" + parkFee);
}
Обратите внимание, что вы можете изменить код так, чтобы он всегда рассчитывал комиссию, а затем применить максимальное значение:
parkFee = Math.Min(MAX_FEE, Math.Ceiling(parkTime) * HOURLY_RATE);
Console.Write("Parking Fee = $" + parkFee);
Здесь Math.Min
выберет наименьшее из двух значений.
Наконец, обратите внимание, что decimal.Parse
выдаст ошибку, если вы введете что-то, чего не ожидаете (например, "1.2Hello" или ""), поэтому может быть лучше использовать TryParse
:
bool isValidTime = false;
do
{
Console.WriteLine("Please enter your total time parked in hours: Eg 1.5 or 3.0");
bool parsedOK = decimal.TryParse(Console.ReadLine(), out parkTime);
isValidTime = parsedOK && parkTime >= 1 && parkTime <= 24;
if (!isValidTime)
{
Console.WriteLine("Error – Park Time out of range");
}
}
while (!isValidTime);
parkFee = Math.Min(MAX_FEE, Math.Ceiling(parkTime) * HOURLY_RATE);
Console.Write("Parking Fee = $" + parkFee);
Здесь циклы будут продолжаться до тех пор, пока не будет введено правильное значение. Обратите внимание, что в структурах цикла вы также можете использовать break;
(выйти из цикла) и continue;
(перейти к следующей итерации цикла) для управления потоком.