3
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。

我已经为此苦苦挣扎了一段时间,似乎无法让它发挥作用......我将不胜感激任何帮助!谢谢你。

4

5 回答 5

2

想想如果发生了InputMismatchException会发生什么。

你的代码会捕捉到它, print "Error: Insert a number."。然后什么?您的函数被声明为返回一个 int 并且它有一个不返回任何内容的路径。

您应该返回一个无法以其他方式返回的值并指示错误,或者重新引发异常。

于 2014-01-16T20:07:43.667 回答
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

于 2014-01-16T20:18:11.157 回答
1

在我的代码i中,在块之外声明,try-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;
}
于 2014-01-16T20:06:52.247 回答
0

由于您正在消费,因此如果抛出InputMismatchException,它将不知道返回什么。InputMismatchException您可以在块中使用throw一些Exception或拥有一些。returncatch

于 2014-01-16T20:11:34.263 回答
0

如果方法具有返回类型,JVM 应该在调用该方法后期望返回值,在这种情况下,返回只有 try {}。假设任何情况下它都没有执行 try 段中的所有语句,那么就没有返回类型,这就是你得到编译器错误的原因。您可以将 return 放在 catch 段和 try 段内,也可以放在 try 和 catch 之外

于 2014-01-16T20:13:35.983 回答