2014-04-25 5 views
-1

임 .txt 파일에서 책 제목을 읽고 arraylist에 넣은 프로젝트에서 작업하면 arraylist가 배열로 변환됩니다. 사용자가 책 참조 번호 인 숫자를 입력하면 선형 검색 및 이진 검색을 사용하여 해당 책을 찾습니다. 바이너리 검색에 대한 코드에 문제가있는 것, 바이너리 검색에 대한 지식이있는 한, 이것이 내가 조립 한 것입니다. 따라서 바이너리 검색 코드에 어떤 문제가 있습니까? 다음은Java에서 이진 검색을 수행하는 방법?

int left = 0,right = bookList.length; 
int int1; 
int1 = Integer.parseInt(input); 
while(left <= right){ 
    int middle = (right + left)/2; 
    int compare = input.compareTo(bookList[middle].referenceNumber); 
    if(compare == 0){ 
     Output2.setText("The book is " + bookList[middle].title); 
    } else if(compare < int1){ 
     right = middle - 1; 
     left = 0; 
     if(compare == 0){ 
      Output2.setText("The book is " + bookList[middle].title); 
     } 
    } else if(compare > int1){ 
     right = bookList.length; 
     left = middle + 1; 
     if(compare == 0){ 
      Output2.setText("The book is " + bookList[middle].title); 
     } 
    } 
    } 

+1

질문이 있습니까? –

+0

본질적으로 동일한 질문을 두 번 다시 보내지 마십시오. 또한 게시하기 전에 디버거를 사용하여 코드를 추적하여 문제의 위치를 ​​확인해야합니다. 디버깅 및 추적은 학습 과정의 중요한 부분이며 여기에서 질문하고 대답을 얻으면 많이 배웠을 것입니다. –

답변

0

때 .length 제로 또는 왼쪽에서 오른쪽으로 설정하지 마십시오 제공 할 수있을 수있는 모든 도움을 나의 책 클래스와 booklist 배열

public class Book{ 
String referenceNumber, title; 

public Book(String _referenceNumber, String _title){ 
    referenceNumber = _referenceNumber; 
    title = _title; 
} 
} 

ArrayList <Book> Books = new ArrayList <Book>(); 
Book [] bookList; 

감사입니다 당신은 당신의 범위를 줄입니다. 이전 값을 유지해야합니다.

int left = 0,right = bookList.length; 
int int1; 
int1 = Integer.parseInt(input); 
while(left <= right){ 
    int middle = (right + left)/2; 
    int compare = input.compareTo(bookList[middle].referenceNumber); 
    if(compare == 0){ 
     Output2.setText("The book is " + bookList[middle].title); 
    } else if(compare < int1){ 
     right = middle - 1; 
     if(compare == 0){ 
      Output2.setText("The book is " + bookList[middle].title); 
     } 
    } else if(compare > int1){ 
     left = middle + 1; 
     if(compare == 0){ 
      Output2.setText("The book is " + bookList[middle].title); 
     } 
    } 
    } 
관련 문제