有关如何处理由于输入格式错误而引发的异常的任何示例代码?

时间:2014-03-20 16:18:57

标签: java android

我正在创建一个执行简单数学运算的简单计算器。我不熟悉抛出和捕获异常的概念。我的问题是,如何处理无效输入?我想告诉用户输入何时无效并将结果设置为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上执行任何其他操作,我会崩溃我的应用程序。

3 个答案:

答案 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)