【问题标题】:"==" always returning true. Anagram program [duplicate]"==" 总是返回 true。字谜程序[重复]
【发布时间】:2019-01-01 01:52:23
【问题描述】:

我做了一个简单的函数,它通过排序和比较排序后的值来检查两个单词是否是字谜,但是即使单词不是字谜,这个程序也总是返回 true。如果我删除 .ToString() 它评估为假。知道为什么要这样做以及有关如何解决此问题的任何想法吗?

public bool anagram(string word1, string word2)
    {
        char[] word1Arr = word1.ToArray();
        char[] word2Arr = word2.ToArray();

        Array.Sort(word1Arr);

        Array.Sort(word2Arr);

        Console.WriteLine(word1Arr);
        Console.WriteLine(word2Arr);

        if (word1Arr.ToString() == word2Arr.ToString())
        {
            return true;
        }
        else
        {
            return false;
        }


    }

【问题讨论】:

  • 你检查过word1Arr.ToString()的输出是什么吗?
  • 如果您能提供Minimal, Complete, and Verifiable example,那就太好了。特别是您的数据样本会有所帮助。
  • @AyJay 调试和进入代码更容易
  • @AyJay 没有更深层次的潜在问题。您没有检查正在比较的内容,否则您会看到它是"System.Char[]"
  • @AyJay 如果您确实对其进行了调试,您会注意到word1Arr.ToString() 不会返回您认为返回的内容。

标签: c# anagram


【解决方案1】:

替换

if (word1Arr.ToString() == word2Arr.ToString())

if (word1Arr.SequenceEqual(word2Arr))

比较数组的内容 - 因为word1Arr.ToString() 返回"System.Char[]" 并将您的比较结果放入

"System.Char[]" == "System.Char[]" 

总是正确的

【讨论】:

    【解决方案2】:

    你也可以使用这个比较:

    if(new string(word1Arr) == new string (word2Arr))
    

    ToString 方法在char[] 中具有默认实现,返回类型为System.Char[] 的名称,这就是为什么当您比较两个char[] 时会得到正确的结果。

    与另一个答案相比:我的方法创建了两个额外的 string 类实例,而另一个答案比较数组而不创建额外的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2013-08-06
      • 2017-05-10
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多