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

4 回答 4

5

您忽略了递归调用返回的值。

你应该改变

find( temp, n );

return find( temp, n );
于 2016-04-21T13:26:09.813 回答
1

大概你想对结果做一些事情,find( temp, n );但目前你没有。因此,您的函数仅返回arr.length - 1ifnarrand-1所有其他情况下的最后一个元素。

于 2016-04-21T13:25:02.483 回答
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);

于 2016-04-21T13:38:26.333 回答
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;
}    
}   
于 2016-04-21T13:48:48.517 回答