【问题标题】:No return specified?没有指定退货?
【发布时间】:2013-02-21 03:58:15
【问题描述】:
public int removeAll(int i){
    while (head.getData() == i){
        int value = head.getData();
        head = head.getNext();
        return value;
    }
    Node curr = head;
    while (curr.getNext() != null){
        if (curr.getNext().getData() != i){
            int value = curr.getNext().getData();
            curr.setNext(curr.getNext().getNext());
            return value;
        }
        else {
            curr = curr.getNext();
        }

    }

}

它一直说没有为函数指定返回,因为它是嵌套的而不是在外循环上。我怎么能把它拿出来清除这个?

【问题讨论】:

  • 如果最后一个值没有通过curr.getNext().getData() != i检查,这将无法返回任何东西,所以我认为编译器是正确的。

标签: java loops return


【解决方案1】:

我认为你需要这个:

Node curr = head;
int value = -1;  // change is here
while (curr.getNext() != null){
    if (curr.getNext().getData() != i){
        value = curr.getNext().getData();  // change is here
        curr.setNext(curr.getNext().getNext());
        break;  // change is here
    }
    else {
        curr = curr.getNext();
    }
}
return value;   // change is here

【讨论】:

    【解决方案2】:

    将您的代码更改为:

    public int removeAll(int i) {
        int value = 0; //You can check in caller code like if it is 0 (or put your own value like -1) then do something
    
        while (head.getData() == i) {
            value = head.getData();
            head = head.getNext();
        }
    
        Node curr = head;
        while (curr.getNext() != null) {
    
            if (curr.getNext().getData() != i){
                value = curr.getNext().getData();
                curr.setNext(curr.getNext().getNext());
            }
            else {
                curr = curr.getNext();   //In this part, there is no return code
            }
    
         }
         return value;
    }
    

    由于至少有一个条件可以满足,没有 return 语句,你得到了错误。这段代码应该可以正常工作。

    【讨论】:

      【解决方案3】:

      如果程序控制在您的removeAll 方法的任何while 循环中都没有到达怎么办。在这种情况下,您应该返回一个整数值,但程序永远不会到达任何 return 语句。因为这个编译器给你错误。

      在函数末尾添加return语句。

      【讨论】:

        【解决方案4】:

        符合JLS 8.4.7,该程序编译失败,因为它确定方法可以正常完成:

        如果一个方法被声明为有返回类型,那么编译时 如果方法的主体可以正常完成,则会发生错误。

        在您的情况下,程序可能会在不进入任何 for 循环的情况下终止,因此不返回任何内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-01
          • 1970-01-01
          • 2015-06-07
          相关资源
          最近更新 更多