我正在创建一个执行简单数学运算的简单计算器。我不熟悉抛出和捕获异常的概念。我的问题是,如何处理无效输入?我想告诉用户输入何时无效并将结果设置为0而不是关闭我的应用程序。我怎样才能为此编写try / catch块?
else if (btn.getId() == 0x7f050062) {
double LeftVal = Double.parseDouble(currentInput);
double result = 0;
if (currentInputLen > 0 && currentInput != "0") {
result = Math.asin(LeftVal);
result *= 180;
result /= Math.PI;
}
inputText.setText(result + "");
此代码应计算输入值的sininverse并输出结果,但如果我将输入设置为12并且cinclate sininverse(12)则显示NaN。现在,如果我在NaN上执行任何其他操作,我会崩溃我的应用程序。
答案 0 :(得分:0)
您可以将java.util.InputMismatchException
导入到您的程序中,并在try代码块中包含calc的操作代码,然后捕获InputMismatchException,但我认为再次提示用户输入新输入更好将结果设置为0.您是否已编写任何代码?我可以在这里为你写一个小程序,但我认为你最好分享你到目前为止的代码,我们可以从中做到。
希望这有帮助。
答案 1 :(得分:0)
try
{
// code here
}
catch(Exception e)
{//code to set value to 0 here}
希望有所帮助。 try语句将尝试块中的所有代码,如果发生错误,它将转到catch块,在那里执行代码。
答案 2 :(得分:0)
编辑:根据您现在发布的代码,我现在可以告诉它不是解析问题。
您可能想要检查NaN值,然后分配0和/或告诉用户。
如果您想在错误后继续前进,请不要使用例外:
if (result == Double.NaN) {
System.err.println("Number out of range, expected number in [-1, 1]");
result = 0;
}
如果您想要停止并告诉用户输入其他内容,请使用例外:
if (result == Double.NaN) {
throw IllegalArgumentException();
}
在你的主要:
try {
// the call to the method that raises the exception
} catch (IllegalArgumentException e) {
System.err.println("Number out of range, expected number in [-1, 1]");
}
原始帖子:
如果你正在解析数字,那么在某些时候你可能不得不使用Integer.parseInt(String)
或其他数字类的等价物。如果输入字符串不是按预期格式化的数字,则这些方法抛出NumberFormatException
。你可以看到它in the doc。
发生此类错误时,执行将停止,您可以在catch
块中执行某些操作:
double inputNumber;
try {
// some code
inputNumber = Double.parseDouble(inputString);
// here you are sure inputNumber was parsed successfully
} catch (NumberFormatException e) {
// do something to tell the user about his error (or not)
System.err.println("wrong input");
inputNumber = 0;
}
// do something with inputNumber (it is either 0 or the input number here)