0

내 배열에없는 문자 인 키를 제공 할 때 왜이 메서드가 ArrayIndexOutOfBounds 예외를 제공하는지 알고 싶습니다. 키가 문자가 아닌 다른 값이면 값을 반환하는 데 문제가없는 것처럼 보입니다. 당신의 binarySearch 방법에서"ArrayIndexOutOfBounds"를 생성하는 binarySearch 메서드 예외

public class BinarySearch2 { 

    public static void main(String[] args) { 
     String[] array = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; 
     String key = "K"; 
     String found = binarySearch(array, key); 
     System.out.println(found); 
    } 

    public static String binarySearch(String[] array, String key) { 
     int low = 0; 
     int high = array.length; 
     int mid = (low + high)/2; 
     //int i = 0; 

     while (low <= high) { 
      //System.out.print(i + " "); 
      if (array[mid].compareTo(key) < 0) { 
       System.out.println(array[mid].compareTo(key)); 
       low = mid + 1; 
       mid = (low + high)/2; 
      } 
      else if (array[mid].compareTo(key) > 0) { 
       high = mid - 1; 
       mid = (low + high)/2; 
      } 
      else 
       return array[mid]; 

      //i++; 
     } 
     return "-1"; 
    } 
} 
+1

당신은 점점 예외? 전체 스택 추적을 게시 할 수 있습니까? –

+2

Arrays.binarySearch를 사용하지 않는 이유는 무엇입니까? –

+0

@EugeneRetunsky .. 프로그래밍의 초기 단계에 OP가있을 수 있습니다. 그렇다면이 방법이 더 좋을 것입니다. 그는 나중에 사용할 수있는 방법을 알게 될 수 있습니다 .. 그는 개념을 얻은 후에 ... –

답변

2

, 당신은 당신의 high에 초기화 한 -

int low = 0; 
int high = array.length; 
int mid = (low + high)/2; 

귀하의 높은 실제로해야한다 : -

int high = array.length - 1; 
+0

@ user1735982 ..이 변경 후 코드를 테스트 할 수 있습니다 .. 작동해야합니다 .. 실제로 그것은 나를 위해 작동 .. 아직도 왜 누군가가 DownVoted .. 모르겠다. –

+0

그래. 그것은 그것을 고쳤다. 감사합니다. –

+0

@RohitJain 먼저, 나는 당신 (또는 누군가)을 downvoted하지 않았습니다. 개인적으로 나는 당신의 대답과 의견을 [ "목록을 정렬하십시오 ..."]라고 생각합니다. (http://stackoverflow.com/questions/12817616/sort-a-list-based-on-a-parameter-available-in-another -class /)가 나빴다. 아마도 당신의 downvoted 대답은, 음, 나쁜거야? – ReyCharles

관련 문제