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。
我已经有一段时间了,现在似乎无法使它工作......我将不胜感激任何帮助!谢谢。
答案 0 :(得分:2)
考虑如果发生InputMismatchException
会发生什么。
您的代码会抓住它,打印"Error: Insert a number."
。然后什么?声明你的函数返回一个int,它有一个路径,它不会返回任何东西。
您应该返回一个无法返回的值,并指出错误或重新抛出异常。
答案 1 :(得分: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;
}
答案 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
部分Exception
或return
块中有catch
。
答案 4 :(得分:0)
如果一个方法具有返回类型,JVM在调用此方法后应该期望返回值,在这种情况下,返回仅使用try {}。假设任何情况下它没有在try段中执行所有语句,那么就没有返回类型,这就是你遇到编译器错误的原因。你可以在catch段内放置return并尝试段或在try和catch
之外