2013-04-17 2 views
0

아래 특정 문자열에 대한 배열을 검색하여 그 위치를 반환하는 메서드를 만들려고합니다. 그렇지 않으면 -1이 반환되는 숫자 여야합니다. 아래에서는 메서드를 사용하여 단어를 검색하고 단어가 배열 내에 있더라도 -1을 반환합니다. 왜 이런거야?배열 내의 문자열 검색

String answer = ""; 

    System.out.println("Enter word to search within array"); 
    answer = in.next(); 


     public static int search(String[] theWords, String answer) { 
     int a = -1; 
     for(int i = 0; i < theWords.length; i++) { 
      if (answer.equals(theWords[i])){ 
       a = i; 
       break; 
      } 
     } 
     return a; 
    } 
당신은 선택적 방법의 소비자 원하지 않는 수 있습니다 정렬하기 때문에 배열의 복사본을 만들 수 있습니다
+0

if 조건에서 직접'a '를 반환 할 수 있습니다. – Srinivas

+4

한가지 :'Arrays.asList (theWords) .indexOf (answer)'는 당신의 친구입니다. 다른 경우에는 이것이 실패 할 때의 완전한 예를 보여 주어야합니다. 내게는 괜찮은 것처럼 보이지만 (코드는 작성하지 않고 작동해야합니다.) 문제를 재현하는 데 도움을 주어야합니다. –

+0

내 추측은 아마도 '대답'이고 'theWords [i]'는 다른 경우 일 것입니다. 'answer.equalsIgnorecase (theWords [i])'시도 했습니까 ?? – PermGenError

답변

1

public static int Search(String[] thewords, String answer) { 
    if(thewords == null) { 
     throw new NullPointerException(); 
    } 
    String[] copy = new String[thewords.length]; 
    System.arraycopy(thewords,0,copy,0,copy.length); 
    Arrays.sort(thewords);  
    return Arrays.binarySearch(thewords, answer); 
} 

참고 : 그것은 -pos하지 -1

당신이 -1 필요한 경우 반환 :

public static int Search(String[] thewords, String answer) { 
    if(thewords == null) { 
     throw new NullPointerException(); 
    } 
    String[] copy = new String[thewords.length]; 
    System.arraycopy(thewords,0,copy,0,copy.length); 
    Arrays.sort(thewords); 
    int idx = Arrays.binarySearch(thewords, answer); 
    return idx < 0? -1:idx; 
} 

코드에 관한 : 나는 문제가 케이스 나 간격과 관련이있을 것이라고 믿는다 큰 배열의 경우 if (answer.equalsIgnoreCase(theWords[i].trim())){

은 이진 검색으로 이동 :
같은 것을로 교체하십시오.

+0

배열이 정렬되지 않으면 어떻게됩니까? – MAV

+1

binarySearch는 * 정렬 된 배열에서만 작동합니다. – Bohemian

+0

@ 보헤미안 : 예. OP를 잘못 읽었습니다. 고정 응답. 내 나쁜 여기에 – Cratylus

4

나는 코드로 잘못 아무것도 볼 수없는,하지만 난 반환 값 보유하고있는 지역 변수를 제거하는 것이 좋습니다 : 거기되는 거의 또는 전혀 기회가,

public static int Search(String[] thewords, String answer) { 
    for (int i = 0; i < thewords.length; i++) { 
     if (answer.equals(thewords[i])){ 
      return i; 
     } 
    } 
    return -1; 
} 

이 단순화 된 논리를 이 코드의 버그.


본인은 수업 일 뿐이며 라이브러리 방법을 사용할 수 없다고 가정합니다. 허용되는 경우 메서드는 단일 행일 수 있습니다.

return Arrays.asList(theWords).indexOf(answer);