2017-10-27 2 views
2

Java 학습에 관한 미시간 가상 온라인 코스를 수강하고 있습니다. 우리는 현재 배열에 대한 연구를 마치고 있으며, 하나의 임무는 이진 검색을 만들어 값 45.3을 찾는 것입니다. 유일한 문제는 45.3이 cmd에서 정수로 읽히지 않고 double로 읽히는 것입니다. 배열에 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)); 
    } 

은} 다음 당신이 정말이 것은 그냥 두 배로 당신에게

답변

1

감사드립니다. Integer[] 대신 Double[]을 사용하십시오.

실제로 래퍼가 필요없는 것 같습니다. compareTo 대신 double[]<>으로 사용하십시오.

0

숫자 정수 리터럴은 int 값으로 컴파일되며, Java 배열은 정확히 하나의 유형을 저장합니다.

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

과에 메소드 서명을 변경 : 필요할 때 당신이 당신의 값에 대한 double[]을 사용할 수 있도록하지만, 자바는 자동으로 , doubleint 값을 확대합니다

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

주 당신 Double[]을 사용할 수 없습니다. int에서 java가 자동으로 넓어지기 때문에 에 대한 Double은 Java 래퍼 클래스입니다. doubleDouble에, 그것은 모두하지 않을 것이다 double에서 자동 박스, 즉이 줄은 컴파일되지 않습니다 :

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