问题描述
当我尝试将两个字符串作为函数的输入并检查它们是否为字谜时,我得到了错误的输出。我已经编写了以下代码。
class Solution {
public boolean isAnagram(String s,String t) {
char sArray[] = s.tochararray();
char tArray[] = t.tochararray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = sArray.toString();
t = tArray.toString();
return s.equals(t);
}
}
我获取的样本输入为s = "anagram" and t = "nagaram"
。选中后,两个char数组都打印相同的值,即
sArray is:
aaagmnr
tArray is:
aaagmnr
但是我的输出似乎是错误的。有人可以帮我吗,为什么在equals()
之后使用toString()
会得到这样的结果?
解决方法
下面的代码行不会将char数组转换为String:
s = sArray.toString();
t = tArray.toString();
这只会将地址转换为String,为了将Array转换为String,您应该使用: Arrays.toString(arrName)
现在代码将如下所示:
public static boolean isAnagram(String s,String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = Arrays.toString(sArray);
t = Arrays.toString(tArray);
return s.equals(t);
}
,
这里,toString()
的char数组上的toString()
方法是从对象类继承的:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,请使用String.valueOf
将字符数组再次转换为String
s = String.valueOf(sArray);
t = String.valueOf(tArray);
由于只需要比较,因此可以使用Arrays.equals()
return Arrays.equals(sArray,tArray);
,
您对App\Product
的转换是错误的,因为数组不会覆盖return Scaffold(
body: SafeArea(
child: Column(
children: [
Container(),...
...
]
)
)
);
的{{1}}实现。
也就是说,没有理由将数组转换为String
以便进行比较。您可以使用Object
直接比较它们,这将返回真实的toString()
。
String
,
您正在比较sArray和tArray的内存地址
s = sArray.toString();
t = tArray.toString();
我建议您遍历数组中的值并将其存储在字符串中。
for( int i = 0; i < sArray.length; i++ )
str += sArray[i];
for( int i = 0; i < tArray.length; i++ )
str2 += tArray[i];
然后像这样进行比较:
return str.equals(str2);
,
您可以使用public String(char[] value)
在String
中创建一个char[]
,例如
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println(isAnagram("anagram","nagaram"));
}
public static boolean isAnagram(String s,String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = new String(sArray);// Create String out of sArray
t = new String(tArray);// Create String out of tArray
return s.equals(t);
}
}
输出:
true
或者,您可以使用String#valueOf
在String
中创建一个char[]
。还有更多解决方案(例如,直接使用Arrays#equals
比较char数组,将一个数组中的每个元素与另一个数组中的每个元素进行比较等),我建议您为学习目的尽可能尝试。>
您的方法出了什么问题?
sArray.toString()
和tArray.toString()
返回不同的字符串,您可以通过打印它们或调试代码来找到它们。这种差异背后的原因是sArray
和tArray
的哈希码不同。检查What is a debugger and how can it help me diagnose problems?,了解如何使用调试器来避免这种情况。