Java 字谜检查中的奇数比较问题

Java 字谜检查中的奇数比较问题,java,comparison,Java,Comparison,对不起,标题太糟糕了;然而,我想不出更好的方法来总结我的困境 在试图解决一个涉及检查一个字符串是否是另一个字符串的字谜的问题时,我实现了一个解决方案,该解决方案涉及删除两个字符串中的所有空白,将它们都转换为字符数组,对它们进行排序,然后查看它们是否彼此相等 如果是,程序将打印“是一个字谜”,否则“不是一个字谜” 问题是,即使我的代码编译成功并且运行良好,最终结果总是“不是一个字谜”,不管两个原始字符串是否确实是彼此的字谜。我为调试插入的快速代码显示,在一个实际的字谜中,我最后比较的两个字符数组显

对不起,标题太糟糕了;然而,我想不出更好的方法来总结我的困境

在试图解决一个涉及检查一个字符串是否是另一个字符串的字谜的问题时,我实现了一个解决方案,该解决方案涉及删除两个字符串中的所有空白,将它们都转换为字符数组,对它们进行排序,然后查看它们是否彼此相等

如果是,程序将打印“是一个字谜”,否则“不是一个字谜”

问题是,即使我的代码编译成功并且运行良好,最终结果总是“不是一个字谜”,不管两个原始字符串是否确实是彼此的字谜。我为调试插入的快速代码显示,在一个实际的字谜中,我最后比较的两个字符数组显然是相同的,但比较的结果是错误的

我不知道为什么会发生这种情况,除非我忽略了一些非常明显的事情,或者在我比较的内容中有一些额外的未显示的角色

代码如下:

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
非常感谢所有帮助。

使用此方法比较两个阵列。它将比较数组的元素,而默认的
Object.equals()
方法将不进行比较

如果指定的两个字符数组彼此相等,则返回
true
。如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则认为两个数组相等。换句话说,如果两个数组包含相同顺序的相同元素,则它们是相等的。另外,如果两个数组引用都
null
,则认为它们相等

使用该方法比较两个数组。它将比较数组的元素,而默认的
Object.equals()
方法将不进行比较

如果指定的两个字符数组彼此相等,则返回
true
。如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则认为两个数组相等。换句话说,如果两个数组包含相同顺序的相同元素,则它们是相等的。另外,如果两个数组引用都
null
,则认为它们相等


数组本身的
.equals
方法不会比较数组的内容

如果你想这样做,你必须自己做——比如:

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

编辑:或使用静态
数组。equals
数组本身的
.equals
方法不会比较数组的内容

如果你想这样做,你必须自己做——比如:

for(int i = 0; i < test1.length; i++) {
    if(test1[i] != test2[i]) {
        return false;
    }
}
return true;
for(int i=0;i
编辑:或使用静态
数组.equals