我在三角形
类中使用下面的代码,允许用户设置声明的三角形
的第一点、第二点或第三点。
public Point get(String p) throws IllegalArgumentException {
IllegalArgumentException e = new IllegalArgumentException();
try {
if (p == "first") { return first; }
else if (p == "second") { return second; }
else if (p == "third") { return third; }
else { throw e; }
}
catch (e) {
System.out.println("Error: " + e);
}
}
编译器告诉我:
Triangle.java:41: error: missing return statement
}
^
但是我认为catch语句的目的是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。
你缺少两个部分: 1.其他条件2的try块中的一个返回
语句。Catch块不会导致返回语句或抛出语句
我不知道第一、第二、第三个变量的类型是字符串还是点,但是你应该用点返回,因为你的函数是:公共点获取(字符串p){...}
函数中的任何内容都不会在多个路径上返回。
但是我认为catch语句的目的是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。
这根本不是try-catch
所做的,而且你的函数被声明返回一个Point
而不是一个String
。
try catch
简单地“捕获”一个可丢弃的
(
Error
或Exception
),并允许您在抛出时运行一些代码,而不是简单地用未捕获的异常/错误来终止应用程序。
在
try-catch
之后,您需要从函数中返回一些值。无法返回字符串,也没有合适的语言构造,其行为类似于您解释的对try-catch
的理解。
此外,你的代码实际上不会抛出
IllegalArgumentException
,因此你的catch
块永远不会被调用。在这种情况下,听起来你想要的是这样的东西
public Point get(String p) throws IllegalArgumentException {
if (p == null) { throw new IllegalArgumentException(); }
if (p.equals("first")) { return first; }
else if (p.equals("second")) { return second; }
else if (p.equals("third")) { return third; }
else { throw new IllegalArgumentException(); }
}
然后可以这样调用代码
Point p;
try {
p = get("notFirst");
} catch (IllegalArgumentException ex) {
//oh no, we gave a bad argument, and the method told us nicely.
}
因为您缺少一个返回语句。
这个方法声明它返回了一些东西,所以它必须返回一些东西(或者抛出一个异常)。如果在执行try
块中的任何return
语句之前抛出异常,编译器无法保证这些语句中的任何语句都会到达。因此,catch
块还需要返回一些东西(或者抛出异常,或者在try/catch
构造之后返回一些东西)。
编辑:再次查看,您还可能在try
块中缺少return
。(如果在整个try/catch
结构之后没有一个。)如果if/else
结构中的任何条件都不满足怎么办?一无所获。这是无效的。
基本上,所有逻辑路径都必须导致方法的有效退出。你已经错过了两条这样的路。
问题内容: 为什么这给了我一个丢失的退货陈述错误?每个if / else都有返回值,最后一个括号出现错误 问题答案: 每个语句都在一个语句内。虽然从逻辑上讲这是不可能的,但是当所有评估都不为真时,编译器需要返回。 我建议: 我认为,此解决方案可解决编译器问题并稍微提高可读性。 或者,有以下解决方案: 引发异常将使你可以退出方法而无需返回任何信息……因为可以说,如果到达最后一个,显然会出错。
下面的Java不工作,因为它缺少一个return语句。我搞不懂怎么了。有什么想法吗? 即使我去掉字符串u,它也会给出相同的错误,如果我添加int usernameLimit,它也会给出相同的错误。
我正在运行这段java代码,遇到一个错误“缺少返回语句”,请帮助。我在windows中使用cmd运行。
我有以下代码 null 我错过了什么?
你好我已经想尽一切办法弄清楚为什么返回语句没有被识别。如果我把“回报余额”放在其他地方,它会说系统。出来无法访问println。。。你们谁能帮我解释一下为什么这可能不起作用??非常感谢。
所以我得到了一个编译器错误,我丢失了一个返回语句,我已经研究了其他类似的问题,但我仍然对这个问题感到困惑。 如果之前有人问过这个问题,我会提前道歉,但我已经看过了其他各种问题,我似乎无法弄清楚这一点。