2009-12-13 2 views
0

죄송합니다. 제목이 끔찍합니다. 그러나 나는 내 처지를 요약하는 더 좋은 방법을 생각할 수 없었다.아나 그램 확인시 이상한 비교 문제

하나의 문자열이 다른 문자열의 anagram인지 확인하는 것과 관련된 문제를 해결하기 위해 두 문자열에서 모든 공백을 제거하고 두 문자 배열을 정렬하여 정렬 한 다음 서로 같다

그렇다면 "anagram"입니다. 그렇지 않으면 "anagram"이 아닙니다.

문제는 내 코드가 성공적으로 컴파일되고 정상적으로 실행 되더라도 원래의 두 문자열이 실제로 서로의 아나그램인지 여부에 관계없이 최종 결과는 항상 "아님 그램이 아닙니다"입니다. 디버깅을 위해 삽입 한 빠른 코드는 실제 분석기가있는 경우 비교를 끝내는 두 개의 문자 배열이 분명히 동일하지만 비교 결과가 false라는 것을 보여줍니다.

엄청나게 명백한 것을 간과하거나 내가 비교할 때 추가로 표시되지 않은 문자가있는 경우가 아니면 왜 이런 일이 발생하는지 정확히 알 수 없습니다.

import java.util.Arrays; 
import java.util.Scanner; 
public class Anagram { 
    public static void main(String[] args) { 
     char[] test1; 
     char[] test2; 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter first phrase>"); 
     test1 = input.nextLine().replaceAll(" ", "").toCharArray(); 
     Arrays.sort(test1); 
     System.out.print("Enter second phrase>"); 
     test2 = input.nextLine().replaceAll(" ", "").toCharArray(); 
     Arrays.sort(test2); 
     if (test1.equals(test2)) { 
      System.out.println("Is an anagram."); 
     } 
     else { 
      System.out.println("Is not an anagram."); 
     } 
     /* debugging */ 
     System.out.println(test1); 
     System.out.println(test2); 
     System.out.println(test1.equals(test2)); 
    } 
} 

그리고 테스트 실행의 결과 출력 :

여기에 코드입니다

Enter first phrase>CS AT WATERLOO 
Enter second phrase>COOL AS WET ART 
Is not an anagram. 
AACELOORSTTW 
AACELOORSTTW 
false 

모든 모든 도움을 크게 감사합니다.

답변

2

두 배열을 비교하려면 Arrays.equals() 메서드를 사용하십시오. 배열의 요소를 비교하는 반면 기본값 인 Object.equals() 메서드는 비교하지 않습니다.

두 개의 지정된 char 배열이 서로 같은 경우는 true을 반환합니다. 두 배열이 같은 수의 요소를 포함하고 두 배열의 요소가 모두 일치하면 두 배열이 같은 것으로 간주됩니다. 즉, 동일한 순서로 같은 요소가 포함되어 있으면 두 배열이 동일합니다. 또한 두 배열 참조가 모두 같다고 간주되는 경우 null입니다.

+0

효과가있었습니다. 정말 고맙습니다. =) – akbiggs

1

.equals 배열 자체의 방법은 배열 내용을 비교하지 않습니다.

for(int i = 0; i < test1.length; i++) { 
    if(test1[i] != test2[i]) { 
     return false; 
    } 
} 
return true; 

편집 : 또는 정적 Arrays.equals를 사용하여 같은 것을 - 당신이 그렇게하고 싶다면

, 당신은 스스로를해야 할 것이다.

+0

도움 주셔서 감사합니다. :) – akbiggs