虽然我有一个返回语句,Eclipse会要求返回语句

时间:2014-01-16 20:05:09

标签: java int return try-catch inputmismatchexception

protected int readInt(String prompt) {
    try {
        System.out.print(prompt);
        int i = keyboard.nextInt();
        keyboard.nextLine();
        return i;

    } catch (java.util.InputMismatchException e) {
        System.out.println("Error: Insert a number.");
    }
}

嗨! Eclipse在方法readInt()中给出了这个错误:“此方法必须返回int类型的结果。”并给出示例解决方案“添加返回语句”和“将返回类型更改为void”。我试图将return i语句放在try-and-catch循环之外,但是当我这样做时,return语句找不到变量i。

我已经有一段时间了,现在似乎无法使它工作......我将不胜感激任何帮助!谢谢。

5 个答案:

答案 0 :(得分:2)

考虑如果发生InputMismatchException会发生什么。

您的代码会抓住它,打印"Error: Insert a number."。然后什么?声明你的函数返回一个int,它有一个路径,它不会返回任何东西。

您应该返回一个无法返回的值,并指出错误或重新抛出异常。

答案 1 :(得分:1)

我的代码itry-catch块之外声明,因此return语句不会有任何范围问题。此外,它的值为-1,因此如果发生异常,则函数将-1返回给调用者。

protected int readInt(String prompt) {
    int i=-1;
    System.out.print(prompt);  
    try { 
        i = keyboard.nextInt();
        keyboard.nextLine();    
    } catch (java.util.InputMismatchException e) {
        System.out.println("Error: Insert a number.");
        keyboard.next();
    }
    return i;
}

答案 2 :(得分:1)

在catch块之后使用return语句添加finally块:

protected int readInt(String prompt) {
  int i = 0;
  try {
    System.out.print(prompt);
    i = keyboard.nextInt();
    keyboard.nextLine();
    //return i;

    } catch (java.util.InputMismatchException e) {
    System.out.println("Error: Insert a number.");
    } finally{
        return i;

    }

}

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

答案 3 :(得分:0)

由于您正在使用InputMismatchException,因此如果抛出InputMismatchException,它将不知道要返回什么。您可throw部分Exceptionreturn块中有catch

答案 4 :(得分:0)

如果一个方法具有返回类型,JVM在调用此方法后应该期望返回值,在这种情况下,返回仅使用try {}。假设任何情况下它没有在try段中执行所有语句,那么就没有返回类型,这就是你遇到编译器错误的原因。你可以在catch段内放置return并尝试段或在try和catch

之外