2017-10-27 11 views
2

私はJavaを学ぶためのミシガンのバーチャルオンラインコースを取っています。私たちは現在、配列に関する研究を終えており、私の仕事の1つはバイナリ検索を作成して値45.3を見つけることです。唯一の問題は、45.3がcmdではなくdoubleとして整数として読み取られることです。配列内に倍精度値と整数値を含めることができるように、コードを作成するにはどうすればよいですか?他のクラスメートもこのコースを受講しているので、邪魔になるとこれが助けになります。バイナリ検索 - 同じ配列の倍数と整数

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)); 
    } 

}

あなた

答えて

1

をありがとう "は整数とダブルスを" 持っている場合は、あなたが本当に持っていることがちょうど倍です。 Integer[]の代わりにDouble[]を使用してください。

実際にはラッパーが必要ないように見えるので、compareToメソッドの代わりにdouble[]<>と組み合わせて使用​​してください。

0

数字の整数リテラルはintという値でコンパイルされ、java配列には1つの型が格納されます。

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

とに、あなたのメソッドのシグネチャを変更します:あなた

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

注意必要なときに、あなたの値についてdouble[]を使用できるようにしかし、Javaは自動的には、doubleint値を広げますを使用できないDouble[] のJavaラッパークラスであるDoubleは、javaが自動的にintからdoubleDoubleからdouble AutoBoxの、それは両方をしない、すなわちこの行はコンパイルされません。

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