2016-04-21 213 views
-2

爲什麼下面的代碼返回-1而不是arr.length-1?如果find()方法正在尋找24,它應該返回5,但現在它返回-1。如果在arr中找不到n,它應該只返回-1。返回聲明未按預期返回

public class linearArraySearch { 

    public static void main(String[] args) { 
     int[] numbers = new int[]{ 12, 42, 56, 7, 99, 24, 6, 1, 5 }; 
     System.out.println(find(numbers, 24)); 
    } 

    public static int find(int[] arr, int n){ 
     if(arr[arr.length-1] == n){ 
      return arr.length-1; 
     }else if(arr.length > 1 && arr[arr.length-1] != n){ 
      int[] temp = new int[arr.length-1]; 
      for(int i = 0; i < temp.length; i++){ 
       temp[i] = arr[i]; 
      } 
      find(temp, n);    
     }   
     return -1; 
    } 
} 
+0

你需要用遞歸做呢?應該非常簡單,只使用for循環 – Nanoc

+0

應該'find(temp,n)'是'return find(temp n)'?否則,你忽略了遞歸的結果。 – khelwood

回答

5

您忽略了遞歸調用返回的值。

find(temp, n); 

return find(temp, n); 
1

大概你想實際上做一些find(temp, n);的結果,但目前你不這樣做。所以你的功能只返回arr.length - 1如果narr-1中的最後一個元素在全部其他情況。

1

您從函數返回只有兩個值,則應該更換。

return arr.length-1; 

的情況下arr[arr.length-1] == n

return -1

所以,你只會得到正確的答案,如果你正在努力尋找數位於您的數組的最後一個索引。

關於

else if(arr.length > 1 && arr[arr.length-1] != n){ 

你不需要arr[arr.length-1] != n因爲你已經檢查了,如果執行來到這裏,這意味着,arr[arr.length-1]] != n,否則,你已經從第一if返回。

你需要返回你可能忘記或沒有意識到的功能的結果。

return find (temp, n);

0
public class linearArraySearch { 

public static void main(String[] args) { 
    int[] numbers = new int[]{ 12, 42, 56, 7, 99, 24, 6, 1, 5 }; 
    System.out.println(find(numbers, 24)); 
} 

public static int find(int[] arr, int n){ 
    if(arr[arr.length-1] == n){ 
     return arr.length-1; 
    } 
    for(int i = 0; i < (arr.length-1); i++){ 
     if(arr[i] == n) { 
      return i; 
     } 
    } 
    return -1; 
}  
}