为什么下面的代码返回-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 :(得分:5)
您忽略了递归调用返回的值。
你应该改变
find( temp, n );
到
return find( temp, n );
答案 1 :(得分:1)
据推测,您希望实际使用find( temp, n );
的结果执行某些操作,但目前您还没有。因此,如果arr.length - 1
是n
的最后一个元素,而{em>所有其他情况下arr
,则您的函数只会返回-1
。
答案 2 :(得分: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
返回。< / p>
你需要返回你可能忘记或没有意识到的功能结果。
return find (temp, n);
答案 3 :(得分: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;
}
}