我正在参加有关学习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));
}
}
谢谢
答案 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[]
(Double
是double
的Java包装类),因为java可以自动从int
扩展从double
到double
{}}到Double
和自动装箱,它不会两个,即此行赢了编译:
Double[] a = {-3,10,5,24,45.3,10.5}; // compile error for the int literals!