当前位置: 首页 > 知识库问答 >
问题:

Java:在try-cat后缺少返回语句[重复]

越狐若
2023-03-14

我在三角形类中使用下面的代码,允许用户设置声明的三角形的第一点、第二点或第三点。

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语句的目的是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。

共有3个答案

裴劲
2023-03-14

你缺少两个部分: 1.其他条件2的try块中的一个返回语句。Catch块不会导致返回语句或抛出语句

我不知道第一、第二、第三个变量的类型是字符串还是点,但是你应该用点返回,因为你的函数是:公共点获取(字符串p){...}

鲁华皓
2023-03-14

函数中的任何内容都不会在多个路径上返回。

但是我认为catch语句的目的是能够捕获错误并返回描述错误的字符串,而不必担心匹配函数的返回类型。

这根本不是try-catch所做的,而且你的函数被声明返回一个Point而不是一个String

try catch简单地“捕获”一个可丢弃的ErrorException),并允许您在抛出时运行一些代码,而不是简单地用未捕获的异常/错误来终止应用程序。

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.
}

汪正雅
2023-03-14

因为您缺少一个返回语句。

这个方法声明它返回了一些东西,所以它必须返回一些东西(或者抛出一个异常)。如果在执行try块中的任何return语句之前抛出异常,编译器无法保证这些语句中的任何语句都会到达。因此,catch块还需要返回一些东西(或者抛出异常,或者在try/catch构造之后返回一些东西)。

编辑:再次查看,您还可能在try块中缺少return。(如果在整个try/catch结构之后没有一个。)如果if/else结构中的任何条件都不满足怎么办?一无所获。这是无效的。

基本上,所有逻辑路径都必须导致方法的有效退出。你已经错过了两条这样的路。

 类似资料:
  • 问题内容: 为什么这给了我一个丢失的退货陈述错误?每个if / else都有返回值,最后一个括号出现错误 问题答案: 每个语句都在一个语句内。虽然从逻辑上讲这是不可能的,但是当所有评估都不为真时,编译器需要返回。 我建议: 我认为,此解决方案可解决编译器问题并稍微提高可读性。 或者,有以下解决方案: 引发异常将使你可以退出方法而无需返回任何信息……因为可以说,如果到达最后一个,显然会出错。

  • 下面的Java不工作,因为它缺少一个return语句。我搞不懂怎么了。有什么想法吗? 即使我去掉字符串u,它也会给出相同的错误,如果我添加int usernameLimit,它也会给出相同的错误。

  • 我正在运行这段java代码,遇到一个错误“缺少返回语句”,请帮助。我在windows中使用cmd运行。

  • 我有以下代码 null 我错过了什么?

  • 你好我已经想尽一切办法弄清楚为什么返回语句没有被识别。如果我把“回报余额”放在其他地方,它会说系统。出来无法访问println。。。你们谁能帮我解释一下为什么这可能不起作用??非常感谢。

  • 所以我得到了一个编译器错误,我丢失了一个返回语句,我已经研究了其他类似的问题,但我仍然对这个问题感到困惑。 如果之前有人问过这个问题,我会提前道歉,但我已经看过了其他各种问题,我似乎无法弄清楚这一点。