提问人:akbiggs 提问时间:12/13/2009 更新时间:12/13/2009 访问量:909
检查字谜的奇怪比较问题
Odd comparison problem in checking for anagram
问:
对不起,标题太糟糕了;然而,我想不出更好的方法来总结我的困境。
在尝试解决一个问题时,我实现了一个解决方案,包括从两个字符串中删除所有空格,将它们都转换为字符数组,对它们进行排序,然后查看它们是否相等。
如果是这样,程序会打印出“Is an anagram.”,否则会打印出“Is not an anagram”。
问题在于,即使我的代码编译成功并运行良好,最终结果始终是“不是字谜”,无论两个原始字符串是否确实是彼此的字谜。我为调试而插入的快速代码表明,在实际字谜的情况下,我最终比较的两个字符数组显然是相同的,但比较的结果是错误的。
我无法确切地说出为什么会发生这种情况,除非我忽略了一些非常明显的东西,或者在我比较的东西中有一些额外的未显示字符。
代码如下:
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赞
John Kugelman
12/13/2009
#1
使用 Arrays.equals() 方法比较两个数组。它将比较数组的元素,而默认方法不会。Object.equals()
如果两个指定的字符数组彼此相等,则返回。如果两个数组包含相同数量的元素,并且两个数组中所有相应的元素对相等,则两个数组被视为相等。换句话说,如果两个数组以相同的顺序包含相同的元素,则它们相等。此外,如果两个数组引用都是 ,则认为两个数组引用相等。
true
null
1赞
Anon.
12/13/2009
#2
数组本身的方法不会比较数组的内容。.equals
如果你想这样做,你必须自己做 - 比如:
for(int i = 0; i < test1.length; i++) {
if(test1[i] != test2[i]) {
return false;
}
}
return true;
编辑:或使用静态.Arrays.equals
评论