没有指定退货?

时间:2013-02-21 03:58:15

标签: java loops return

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();
        }

    }

}

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

4 个答案:

答案 0 :(得分:0)

我认为你需要这个:

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

答案 1 :(得分:0)

将您的代码更改为:

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

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

答案 2 :(得分:0)

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

在函数末尾添加return语句。

答案 3 :(得分:0)

根据JLS 8.4.7,此程序无法编译,因为它确定方法可以正常完成:

  

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

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