C# C语言中的基本错误捕获#
我需要有一个基本的错误捕捉,如果用户输入负利率,它会生成一个错误语句。目前我有一个贷款计算器,它会产生一个关于负利率的错误,但它在if-else语句中。我也有一个try-catch语句,但它只在用户键入数字以外的内容时产生错误消息。任何关于如何让try-catch语句为我的负利率生成错误的指导/提示都将非常有用。谢谢C# C语言中的基本错误捕获#,c#,validation,exception-handling,try-catch,C#,Validation,Exception Handling,Try Catch,我需要有一个基本的错误捕捉,如果用户输入负利率,它会生成一个错误语句。目前我有一个贷款计算器,它会产生一个关于负利率的错误,但它在if-else语句中。我也有一个try-catch语句,但它只在用户键入数字以外的内容时产生错误消息。任何关于如何让try-catch语句为我的负利率生成错误的指导/提示都将非常有用。谢谢 namespace Program_3_Car_Calc { public partial class Form1 : Form { public Form1()
namespace Program_3_Car_Calc
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) // Calculate message box
{
double LoanAmount = 0;
double Payment = 0;
double InterestRate = 0;
double DownPayment = 0;
int PaymentPeriods = 0;
// Inputs
try
{
InterestRate = Convert.ToDouble(txtRate.Text);
PaymentPeriods = Convert.ToInt16(Convert.ToDouble(txtTime.Text) * 12);
LoanAmount = Convert.ToDouble(txtLoan.Text);
DownPayment = Convert.ToDouble(txtDown.Text);
// Calculate the monthly payment
if (InterestRate > 0)
{
InterestRate = InterestRate / 100;
}
else
{
MessageBox.Show("Error, Please enter a positive number");
}
Payment = ((LoanAmount - DownPayment) * Math.Pow((InterestRate / 12) + 1,
(PaymentPeriods)) * InterestRate / 12) / (Math.Pow(InterestRate / 12 + 1,
(PaymentPeriods)) - 1);
Payment = Math.Round(Payment, 2);
// Ouptput the results of the monthly payment
lblMonthlyPayment.Text = "Your Monthly Payment will be: " + "$" + Payment.ToString ("N2");
}
catch
{
MessageBox.Show("You have entered an invalid character");
}
}
private void CloseGoodbye(string message, string title = " ", int amount = 0) //Optional Parameter for amount of time message box appears
{
for (int i = 0; i < amount; i++)
MessageBox.Show(message, title);
Application.Exit();
}
private void cmdFinished_Click(object sender, EventArgs e) // Finished Message box
{
CloseGoodbye("Goodbye", "Loan Calc", 1);
}
}
名称空间程序\u 3\u Car\u计算
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数)//计算消息框
{
双LoanAmount=0;
双倍支付=0;
双酯=0;
双倍首付=0;
int PaymentPeriods=0;
//投入
尝试
{
InterestRate=Convert.ToDouble(txtRate.Text);
PaymentPeriods=Convert.ToInt16(Convert.ToDouble(txtTime.Text)*12);
LoanAmount=Convert.ToDouble(txtLoan.Text);
首付=Convert.ToDouble(txtDown.Text);
//计算每月的付款
如果(利率>0)
{
利率=利率/100;
}
其他的
{
MessageBox.Show(“错误,请输入正数”);
}
付款=((贷款金额-首期付款)*数学功率((利率/12)+1,
(付款期))*利率/12)/(数学功率(利率/12+1,
(付款期))-1);
付款=数学四舍五入(付款,2);
//输出每月付款的结果
lblMonthlyPayment.Text=“您的每月付款将为:“+”$“+Payment.ToString(“N2”);
}
抓住
{
Show(“您输入了无效字符”);
}
}
private void closebye(string message,string title=“”,int amount=0)//出现时间量消息框的可选参数
{
对于(int i=0;i
我的建议是坚持使用if
/else
语句
避免使用try
/catch
捕获可预防的错误。这不是最佳做法
如果你一心想抛出一个异常,那么你可以键入
throw new ArgumentException("You have entered an invalid character");
从技术上讲,您可以抛出任何类型的异常,但是ArguementException
通常用于具有无效参数的情况
请记住,如果您立即捕获此异常,则该异常的全部用途都将丢失否,请勿为此使用异常。异常用于异常情况,而不是用于用户输入验证。此外,您的try/catch覆盖了太多代码,而catch捕获了太多异常。您不知道发生了什么错误当您在
catch
块中,并且您甚至没有使用catch(Exception ex)
,以便您可能发现出了什么问题。这是一个非常糟糕的主意。您走错了方向。输入验证应尽可能避免异常。但是如果您想知道如何抛出(引发异常),只需搜索它。您应该使用Double.TryParse通过异常删除对非数字输入的处理…您应该检查输入参数(首先,如果存在),然后检查它们的类型(如果可以转换和更正),接下来是您的业务规则,然后进行计算。换句话说,整个验证周期。我更喜欢使用if/else语句,但任务是在输入负利率时进行基本错误捕获。参数和错误捕获是我们本周学习的内容。错误和异常是两件不同的事情。分配是否指定在用户输入无效值时向用户发出警告,或明确告诉您使用异常处理(即try/catch)?@user3677801:检查用户输入是基本的错误处理。如果作业明确说明您应该为此使用异常,那么请执行两次作业。一次按要求执行,一次按正确的方式执行。如果老师对正确的方式不感兴趣,您仍然应该如此。@Jim Dagg我假设我们需要使用try/catch语句,因为这是我们本周学习的内容。也许我对作业的理解是错误的。“执行基本错误捕获,包括在输入负利率时产生错误。”@David你对这两种方法都有很好的理解。我确实想学习正确的方法。