这个问题在这里已有答案:
我一直想弄清楚如何做好几个小时。如何使程序仅采用1到6的值,否则崩溃?
“用户只输入可接受的信用小时数 - 输入的每个信用小时数是0到6之间的整数,没有别的。在这种情况下,任何无效或错误或空的输入数据都会导致运行时错误,这是预期的并且很好“。
这是我尝试过的方法之一。我需要找出如何使程序只是给出运行时错误。我不需要继续询问输入或显示消息“错误”
creditHours = double.Parse(tb_credit.Text);
if (creditHours != 1 || creditHours != 2 || creditHours != 3 ||
creditHours != 4 || creditHours != 5 || creditHours != 6)
{
creditHours = double.Parse(tb_credit.Text);
}
Mehdi是正确的,但是这就是为什么你的代码不起作用的原因。
假设用户输入“2”,然后
if(creditHours != 1 || ...)
{
}
这是真的,因为creditHours不等于1,它是2.但是,然后让我们说用户输入“9”,if(creditHours != 1 || ...)
仍然会再次为真,因为creditHours不等于1而是9.而是有效和无效值产生相同的结果。要更正您的代码,您需要if(creditHours == 1 || ...)
。
Mehdi的代码更简单,但我喜欢写;
if(0 <= creditHours && creditHours <= 6)
{
}
认为它只是读得更好。
if (creditHours < 0 || creditHours > 6)
{
throw new Exception("Credit hours can only be between 0 and 6.");
}
请检查您的解决方案如下:
if(!double.TryParse(tb_credit.Text, out var creditHours))
{
throw new Exception("Credit hours should be a numbers between 0 and 6.");
}
if (creditHours > 0 || creditHours < 6)
{
creditHours = double.Parse(tb_credit.Text);
}
throw new Exception("Credit hours should be a numbers between 0 and 6.")