代码之家  ›  专栏  ›  技术社区  ›  akbiggs

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

  •  0
  • akbiggs  · 技术社区  · 16 年前

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

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

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

    代码如下:

    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 回复  |  直到 16 年前
        1
  •  2
  •   John Kugelman Michael Hodel    16 年前

    使用 Arrays.equals() Object.equals() 方法将不起作用。

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

        2
  •  1
  •   Anon.    16 年前

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

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

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

    Arrays.equals .