【发布时间】:2021-07-30 09:47:47
【问题描述】:
我的问题是,在这段代码中,最初我们将布尔 isAnagram 设为 false,然后设置条件,但我们得到了错误的结果。很明显,它们不是字谜,但代码输出是'字谜'。
package strings;
public class Anagrams {
public static void main(String[] args) {
String a = "aab";
String b = "abc";
boolean isAnagram = false;
int al[] = new int[256];
int bl[] = new int[256];
for(char c:a.toCharArray()) {
int index = (int)c;
al[index]++;
}
for(char c:b.toCharArray()) {
int index = (int)c;
bl[index]++;
}
for(int i = 0; i<256; i++) {
if(al[i] == bl[i]) {
isAnagram = true;
}
}
if(isAnagram) {
System.out.println("anagram");
}else {
System.out.println("not anagram");
}
}
}
}
【问题讨论】:
-
问题出在最后一个
for-loop 中。我们必须遍历两个数组a和b来确定这些词是否是彼此的字谜。因此,我建议从假设它们是字谜 (boolean isAnagram = true) 开始,遍历a和b并将isAnagram设置为falseiff。a[i] != b[i](如果发现不匹配,我们也可以关闭循环)。我也推荐阅读:How to debug small programs -
备注:
chars 在java中实际上是用unicode编码的。所以char的int值可能是>= 256(Ideone demo)。承认,这可能是一个极端情况。但是使用Map<Character, Integer>而不是int[256]来跟踪字符出现可以解决这个问题。