2013-02-21 63 views
-1
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(); 
     } 

    } 

} 

它一直說沒有爲該函數指定的返回值,因爲它是嵌套的而不是外部循環。我怎樣才能解決這個問題?沒有指定回報?

+0

如果最後一個值失敗'curr.getNext()。getData()!= i'檢查,這將無法返回任何東西,所以我認爲編譯器是正確的。 – 2013-02-21 04:00:36

回答

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

由於當時至少具有一個條件可以得到滿足,那裏有沒有return語句,你出現錯誤。此代碼應該可以正常工作。

0

如果程序控制從未到達removeAll方法的任何while循環,該怎麼辦?在這種情況下,您應該返回一個整數值,但程序永遠不會達到任何return聲明。由於這個編譯器給你的錯誤。

在函數結尾添加return聲明。

0

在符合JLS 8.4.7,這個程序編譯失敗,因爲它決定了該方法可以正常完成:

如果一個方法被聲明爲返回類型,然後編譯時 錯誤如果方法的主體可以正常完成,則會發生。

在您的情況下,程序可能會終止而不輸入任何for循環,因此不返回任何內容。