二进制搜索 - 同一阵列中的双打和整数

时间:2017-10-27 12:36:01

标签: java arrays integer double binary-search

我正在参加有关学习Java的密歇根虚拟在线课程。我们目前正在完成对数组的研究,我的一个任务是创建二进制搜索以找到值45.3。唯一的问题是45.3在cmd中不是整数,而是双精度型。如何制定我的代码,以便在数组中包含double和integer值?其他同学也参加了这门课程,所以如果他们被困住,这将有助于他们。

class binarysearcharrayunitproject
{
    public static final int NOT_FOUND = -1;
    public static int binarySearch(Integer [] a, int x)
    {
        int low = 0;
        int high = a.length-1;
        int mid;
        while( low <= high )
        {
             mid = ( low + high ) / 2;


        if( a[mid] .compareTo(x)<0)
                low = mid + 1;
        else if(a[mid].compareTo(x) > 0 )
                    high = mid-1;
        else
                    return mid;
     }
     return NOT_FOUND;
    }


public static void main(String[] args)
    {
          int SIZE = 6;
        Integer[]a= **{-3,10,5,24,45.3,10.5};**
          System.out.println("45.3 found at " +binarySearch(a, 78));
    }

}

谢谢

2 个答案:

答案 0 :(得分:1)

如果你有&#34;整数和双打&#34;,那么你真正拥有的只是双打。使用Integer[]代替double[]

事实上,您似乎不需要包装器,因此只需使用<>而不是compareTo方法。

答案 1 :(得分:0)

数字全数字文字被编译为int值,而java数组只有它们存储的一种类型。但是,java会在需要时自动加宽 int值到double,因此您可以使用double[]作为您的值:

double[] a = {-3,10,5,24,45.3,10.5};  // compiles OK

并将您的方法签名更改为:

public static int binarySearch(double[] a, int x);

请注意,不能使用Double[]Doubledouble的Java包装类),因为java可以自动从int扩展从doubledouble {}}到Double 自动装箱,它不会两个,即此行赢了编译:

Double[] a = {-3,10,5,24,45.3,10.5};  // compile error for the int literals!