"==" 总是返回 true。字谜程序[重复]
Posted
技术标签:
【中文标题】"==" 总是返回 true。字谜程序[重复]【英文标题】:"==" always returning true. Anagram program [duplicate] 【发布时间】: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()
不会返回您认为返回的内容。
【参考方案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
类实例,而另一个答案比较数组而不创建额外的对象。
【讨论】:
以上是关于"==" 总是返回 true。字谜程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章
getRequestProperty("Authorization") 总是返回 null
getRequestProperty("Authorization") 总是返回 null