2016-04-21 214 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; 
}  
}