這裏只是一個初學者,我有一個控制檯應用程序,用於計算停車場運行良好的應付費用,至少直到您輸入一個正數的值。當一個方法從if語句返回一個值時,else語句中應該包含哪些內容?
我們剛開始使用多種方法,我的問題是我傳遞的'小時'值使用If else語句來獲得電荷值,但作爲方法傳遞迴雙倍的方法我對於其他什麼是最佳實踐有點困惑。
理想情況下,我希望能夠爲「小時」輸入無效值(負整數),並且程序將返回錯誤消息並再次跳回到程序的開始位置。
爲了得到這種效果,現在我設置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;
}
}
}
'當我嘗試使用try/catch時,在'Sem2Assign1ExampleREAL.exe'中發生'System.ArgumentOutOfRangeException'類型的未處理異常,當我輸入小時的負值並吐出上述內容時,程序會掛起。 投擲新是完全按照你的建議,但嘗試/捕獲是.. 嘗試 { charge = CalcCharge(hours); } catch(ArgumentOutOfRangeException) Console.Write(「Invalid hour value。Please try again」); 繼續; } – StolenSheep
如果它運行了幾個小時,那麼條件:'小時!= -999'永遠不會被滿足。 「catch」中的信息是否被打印出來? –