2012-04-26 3 views
0

문자열에 대한 이진 검색을 수행하고 출력 오류를 표시했습니다. 내가 뭘 놓쳤는 지 모르겠다. 나는 조언이 필요하다. 여기이진 검색 출력 오류

내 코드 :

public static final int Not_Found = -1; 

    public static int BS(String[][] record, String x) 
{ 
int low = 0; 
int high = record.length - 1; 
int mid; 

while(low <= high) 
{ 
mid = (low + high)/2; 

if(record[ mid ].compareTo(x) < 0) 
low = mid + 1; 
else if(record[ mid ].compareTo(x) > 0) 
high = mid - 1; 
else 
return mid; 
} 

return Not_Found; 
    } 

그것의 내가없는 뭔가? 아니면 그것을 찾기 위해 다른 방법을 사용해야합니까? 여기

오류 :

오류 : 기호 을 찾을 수없는 경우 (기록 [미드] .compareTo (X) < 0) ^ 기호 : 방법은 compareTo (문자열)

에러 : 방법은 compareTo (String)을

+0

문자열을 문자열 배열과 비교할 수 없습니다. –

+1

"String [] [] record"를 사용하고 있습니다. 1d 레코드이면 "String [] record"를 사용하십시오. – Arpssss

+0

2D 어레이에서 어떻게 작업해야합니까? 어떤 충고? – user1342633

답변

1

음 0 : 기호 다른 경우 (기록 [미드] .compareTo (X)> 0) ^ 기호를 찾을 수 없습니다은 2D 배열이므로 record[j]은 문자열이 아닌 배열을 제공합니다. 아마 1D 배열을 대신 사용하려고 했나요?

+0

2D 배열을하고 있었으므로 어떻게해야합니까? – user1342633

+0

이진 검색은 '선형'방식으로 수행되기 때문에 모든 행을 연결하여 2D 배열을 1D 배열로 늘리는 방법을 사용할 수 있습니다. 그런 다음이 새로운 배열을 정기적 인 이진 검색으로 검색 할 수 있습니다. 또는 마찬가지로 2D record 배열의 모든 행을 검색하는 for-loop를 가질 수 있습니다. – arshajii

+0

그럴 수 있다면, 조언 해 주셔서 감사합니다. – user1342633

1

"String [] []"은 2D 레코드를 의미합니다. 따라서, record [j]는 해당 j 번째 열 배열을 제공합니다. 어느 문자열과 비교할 수 없습니다. 그래서 1d 레코드라면 "String [] record"를 사용하십시오.

+0

그래서 2D에서 작업하고 싶다면 차이 포맷 코드를 변경해야합니까? 아니면 그 중 일부를 변경해야합니까? – user1342633

+0

코드는 모든 레코드 [mid] [i]를 String과 비교해야합니다. 이렇게하면 비교할 수 없습니다. 예를 들어 [0] = 7, [1] [0] = 5, [2] [0] = 0, record [2] [1] = 5로 기록하십시오. 당신의 중반이 틀린 중앙을 줄 것이기 때문에 결과. rec [0] = record [0] [0], rec [0] = record [0] [1] ... 등등 (레코드를 저장하기 위해 다른 임시 배열을 사용) 할 수 있습니다. 그런 다음 이진 검색을 수행하고 반환 된 결과 위치를 record [] [] row-col number로 변환합니다. 나는 그것이 더 간단 할 것이라고 생각한다. – Arpssss