나는 이진 검색 방법을 사용하여 특정 키를 사용하여 첫 번째 요소와 마지막 요소를 찾아야합니다. searchFirst 메서드를 사용하여 이미 완료되었지만 searchLast 메서드를 완료 할 수 없습니다. 가끔은 때로는 작동하지 않습니다 (그것은 가치있는 메신저에 달려 있습니다) 그리고 그게 문제입니다.특정 키를 사용하여 배열의 마지막 요소를 찾는 방법
저는 타임 스탬프, 이름, 제품 등 텍스트 파일을 읽는 것과 같은 몇 가지 속성을 가진 Data 클래스가 있습니다. 메신저 때 병합 정렬로 배열을 정렬 데이터 배열을 작성 완료되었습니다.
그런 다음 특정 이름으로 배열의 첫 번째 요소와 마지막 요소가 필요합니다.
searchFirst 메소드는 완벽하게 작동하지만 searchLast는 내가 원하는 것을 수행하지 않습니다.
다음은 searchLast 메소드의 코드입니다 (n은 검색해야하는 값이고 w는 현재 사용되지 않음).
public static int searchLast(Data[] array, String n, String w) {
int left = 0;
int right = array.length - 1;
int m = -1;
while (left < right) {
m = (left + right)/2;
if (array[m].getName().compareTo(n) > 0) {
right = m - 1;
} else {
left = m + 1;
}
}
if (m >= 0) {
if (array[right].getName().equals(n)) {
return right;
}
}
return NO_KEY;
}
어쩌면 당신이 ...
당신이 우리의 예를 줄 수없는 경우에 코드가 마지막 가끔 발견 ... 나를 도울 수있는 버그를 찾을 수 없습니다 입력이 작동하지 않습니까? – Keppil
내가 inputarray를 게시 할 수 있는지는 모르지만 getName은 "GXA : name"과 같은 String을 반환합니다. x는 숫자이고 예를 들어 "G13A : Shuffle"과 같은 String을 찾고 있습니다. 그게 충분한 정보인가? - 정수 배열의 특정 숫자로 마지막 요소를 찾는 것처럼 그것을 생각합니다. – XenonUnlimited
'searchFirst'와'searchLast'는 저에게리스트에 하나 이상의 반복 된 값이 있다고 생각합니다. 이진 검색은이 경우를 처리하지 않습니다. 일단 발견하면 끝납니다. 이진 검색이어야합니까? –