0

我正在研究递归问题,我要调用它,但它显示如下

import java.util.Arrays;


public class BinarySearch {
public static int binarySearch(int [] list, int key){
    int low = 0;
    int high = list.length -1;
    return binarySearch(list, key, low ,high);
}
public static int binarySearch(int [] list, int key, int low, int high){
    if(low > high){
        return (-low -1);}
    int mid = (low + high) / 2;
    if(key < list[mid])
        return binarySearch(list, key, low, mid - 1);
    else if(key == list[mid])
        return mid;
    else
        return binarySearch(list, key, mid + 1, high);
}
public static void main (String [] args){
    int [] list = {'1', '2','4','5'};
    binarySearch(list, 4);
    System.out.println(Arrays.toString(list));

}

}

输出:[49、50、52、53]

我应该怎么做才能使它正确?

4

3 回答 3

4

您将字符存储在整数数组中:-

int [] list = {'1', '2','4','5'};

因此,您获得的值1, 2, 4, 5分别是 ASCII 码。因此,您的binarySearch方法将永远无法找到该值4。因为,它并不完全存在。删除您的值周围的那些单引号。

其次,您没有打印return valueofbinarySearch方法:-

binarySearch(list, 4);

应该: -

System.out.println(binarySearch(list, 4));
于 2012-12-07T14:20:10.463 回答
1

您添加到列表字符值。

像这样切换单引号应该没问题

{1,2,4,5};

因此,在您给定的情况下,您正在存储字符“1”、“2”、“3”和“4”的 ascii 值

于 2012-12-07T14:22:31.947 回答
0

正如 Rohit 指出的那样,您正在利用char类型作为数字类型。

您可以将您的“列表”声明为char[]它应该修复它,或者使用数字文字。

于 2012-12-07T14:22:42.590 回答