【问题标题】:Odd comparison problem in checking for anagram检查字谜时的奇数比较问题
【发布时间】:2009-12-13 13:23:36
【问题描述】:

对不起,标题太糟糕了;但是,我想不出任何更好的方式来总结我的困境。

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

如果是,程序打印出“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

非常感谢任何和所有帮助。

【问题讨论】:

    标签: java comparison


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      编辑:或使用静态Arrays.equals

      【讨论】:

        猜你喜欢
        • 2019-10-10
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 2015-05-05
        • 2020-11-30
        • 2010-11-08
        • 2017-08-12
        • 2014-03-03
        相关资源
        最近更新 更多