2012-12-05 6 views
0

array 및 array.BinarySearch 함수를 사용하여 암호 및 사용자 이름의 유효성을 검사하려고합니다. 배열의 처음 두 사용자 이름 : bradley와 john이 함수 0과 1을 사용하여 올바른 위치를 반환합니다. 그러나 배열 jim과 clarke에서 마지막 두 문자열의 유효성을 검사하려고하면 binarySearch 함수가 사용자 이름을 반환합니다. 두 번 모두 배열에서 -2로 설정하면 유효성 검사가 실패하게됩니다. 어떤 아이디어?잘못된 데이터를 반환하는 Array.binarySearch

String[] names = {"bradley","john","jim","clarke"}; 
    String[] passwords = {"password","password","test","test"}; 
    int pos = Arrays.binarySearch(names, uname); 
        System.out.println("Found you in array:" + uname + "here:" + pos); 
        if(pos >= 0) 
        { 
         System.out.println("Validation password for:" + uname); 
         if(passwords[pos].equals(pword) && !loggedOn[pos]) 
         { 
    } 

답변

7

names 어레이가 정렬되지 않는다 : (일반 및 binary searching algorithm) binarySearch()의 요구가

String[] names = {"bradley","john","jim","clarke"}; 

:

범위는 오름차순으로 정렬되어야

정렬 먼저 매력처럼 작동합니다.

String[] names = {"bradley","clarke","jim","john"}; 
+1

바이너리 검색은 정렬 할 값을 필요로합니다. 중간에 배열 범위를 나눌 수 있고, 더 절반이 더 가깝게 매핑되는 중간 값을 결정할 수 있습니다. –

+0

확실하게 이것은 암호 필드의 유효성 검사에 영향을 미치고 암호 배열의 해당 위치를 찾으면 정렬됩니까? – Bradley

+0

내장 된 대신 수동 정렬 알고리즘을 구현하면 이름 배열의 위치를 ​​바꿀 때마다 비밀번호 배열의 위치를 ​​바꿀 수 있습니다. – jonhopkins

2

이진 검색을 사용하려면 배열을 직접 정렬해야합니다. 순서대로 이름을 나열하거나 직접 정렬을 수행 할 수 있습니다. Arrays.sort(names)을 사용하여 이름 배열을 정렬 할 수 있습니다.

+0

내부적으로 정렬을 병합합니까? –

관련 문제