Return 语句未按预期返回
Return statement not returning as expected
为什么下面的代码 return -1 而不是 arr.length-1
?如果 find()
方法正在寻找 24,它应该 return 5,但现在它 returns -1。如果在 arr.
中找不到 n,它应该只有 return -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;
}
}
大概你想对 find( temp, n );
的结果做一些实际的事情,但目前你没有。所以你的函数只有 returns arr.length - 1
if n
is the last element of arr
and -1
in all other cases .
您忽略了递归调用返回的值。
你应该改变
find( temp, n );
到
return find( temp, n );
您 return 您的函数中只有两个值。
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
,否则,你从第一个开始就被return编辑了if
.
您需要 return 您可能忘记或没有意识到的函数结果。
return find (temp, n);
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;
}
}
为什么下面的代码 return -1 而不是 arr.length-1
?如果 find()
方法正在寻找 24,它应该 return 5,但现在它 returns -1。如果在 arr.
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;
}
}
大概你想对 find( temp, n );
的结果做一些实际的事情,但目前你没有。所以你的函数只有 returns arr.length - 1
if n
is the last element of arr
and -1
in all other cases .
您忽略了递归调用返回的值。
你应该改变
find( temp, n );
到
return find( temp, n );
您 return 您的函数中只有两个值。
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
,否则,你从第一个开始就被return编辑了if
.
您需要 return 您可能忘记或没有意识到的函数结果。
return find (temp, n);
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;
}
}