这里只是一个初学者,我有一个控制台应用程序,计算一个工作正常的停车场的应付费用,至少在你输入一个正数值之前。
我们刚刚开始使用多种方法,我的问题是我传递'hours'值的方法使用If else语句来获取费用值,但是当方法传回一个double我是一个对于其他什么是最佳实践,我感到很困惑。
理想情况下,我希望能够为“小时”输入无效值(负整数),程序将返回错误消息并再次退回到程序的开头。
为了获得该效果,我现在设置else的返回值以将值传递回0,然后在main方法中使用if语句来处理'hours'= 0的情况。然后我'我正在使用goto来做到这一点,但我不确定这是最好的做法。如果是,那很好,但是如果有更好的方式,我宁愿不依赖于更糟糕的东西。
为任何和所有帮助干杯。
class Program
{
static void Main(string[] args)
{
double charge = 0;
double hours = 0;
string reg;
start:
while (hours != -999)
{
Console.Write("\nEnter hours : ");
hours = Convert.ToDouble(Console.ReadLine());
charge = CalcCharge(hours);
if (charge == 0)
{
Console.Write("Invalid hour value. Please try again.\n");
goto start;
}
Console.Write("\nEnter reg : ");
reg = Console.ReadLine();
if (reg == "Sligo")
charge = charge - ((charge / 100) * 10);
if (charge > 100)
charge = 100;
Console.Write("\nThe charge is ${0:f2}.", charge);
Console.ReadLine();
}
}
static double CalcCharge(double hours)
{
double result;
if (hours > 0 && hours < 7)
{
result = hours * 2;
return result;
}
if (hours >= 7 && hours <= 10)
{
result = hours * 3;
return result;
}
if (hours >= 11 && hours <= 15)
{
result = hours * 4;
return result;
}
if (hours > 15)
{
result = hours * 3;
return result;
}
else
{
return 0;
}
}
}
答案 0 :(得分:1)
您可能不应该使用else
,而是抛出异常。在这里使用ArgumentException
可能是正确的。捕获异常而不是检查返回值:
public static void Main(string[] args)
{
//your code
try
{
charge = CalcCharge(hours);
}
catch(ArgumentException)
{
Console.Write("Invalid hour value. Please try again.\n");
continue;
}
...
static double CalcCharge(double hours)
{
//Your code
throw new ArgumentException("hours");
}
此外,避免使用goto
,因为这是不好的做法,可能会导致非常混乱的意大利面条代码。如果你看一下这个例子,我会使用一个continue
,它基本上是说“回到循环的开始”。
答案 1 :(得分:0)
我可能会将你的功能改为:
static double CalcCharge(double hours)
{
double result = 0;
if (hours > 0 && hours < 7)
{
result = hours * 2;
}
else if ((hours >= 7 && hours <= 10) || hours > 15)
{
result = hours * 3;
}
else if (hours >= 11 && hours <= 15)
{
result = hours * 4;
}
else
{
throw new ArgumentOutOfRangeException("there was a problem!");
}
return result;
}
这有点简洁,如果出现问题,它可以让你在父函数中捕获异常。