【问题标题】:Java: return statement compilation errorJava:返回语句编译错误
【发布时间】:2016-07-31 16:07:19
【问题描述】:

我用Java写了以下代码,但是有一个错误说“线程中的异常”main“java.lang.Error:未解决的编译问题:”

    public static int guessNum (int num){
        if (num == 0){
            throw new IllegalArgumentException();
        }

        if (num > 0){
            return 1;
        }

        if (num < 0){
            return 0;
        }
    }

当我将最后一个if 语句更改为else{return 0;} 时,错误消失了。

我想知道是否有办法将最后一个 if 语句保留为 if() 而不是 else{},因为我认为前者更具可读性。

编辑: 假设我在 main 方法中运行这个方法:

public static void main (String[] args){
    System.out.println(guessNum(10));
}

发生错误:

线程“main”java.lang.Error 中的异常:未解决的编译问题: 此方法必须返回 int 类型的结果

【问题讨论】:

  • 告诉我们确切的错误。
  • 最后一个 if 是不必要的 - 以及 else。详情见我的回答。

标签: java if-statement syntax compilation compiler-errors


【解决方案1】:

Java 编译器看到,如果三个条件都不满足(尽管这是不可能的),则没有return 语句。一种可能的解决方法是在ifs 下方添加以下行:

throw new AssertionError("Impossible to reach.");

应抛出AssertionError 以指示断言失败,包括满足不可能的条件时。在ifs都不是true的不可能的情况下,它也会终止该方法,这满足了编译器。

【讨论】:

    【解决方案2】:

    您收到错误是因为您的方法返回一个“int”。 您的所有退货语句都包含在“如果”条件中。编译器会抱怨您的任何条件都可能不满足(即使它们是 - 您正在检查所有情况)。

    您需要提供默认的返回语句。事实上,最后一个 if 是不必要的,因为如果 num 是 != 0 而不是 > 0,那么它必须是

    将方法改为:

    public static int guessNum (int num){
        if (num == 0){
            throw new IllegalArgumentException();
        }
    
        if (num > 0){
            return 1;
        }
    
        return 0; //The other conditions were not met so this must be the result
    }
    

    【讨论】:

      【解决方案3】:

      这可能是因为您的方法应该返回一个整数值,但仅使用 if 语句并不能保证返回一个整数。所以使用以下,应该可以解决问题:

      public static int guessNum (int num){
          if (num == 0){
              throw new IllegalArgumentException();
          } else if (num > 0){
              return 1;
          } else {
              return 0;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-08-20
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-27
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-11-01
        相关资源
        最近更新 更多