初学者,我们被分配了一项任务,在两个不同的字符串中寻找共同的辅音。如果输入中没有空格,则此代码工作得很好,但在此赋值中,我们从用户那里获取输入,它们是名和姓。如果没有空格,我会得到常见字符的正确值,但是当名字和姓氏之间有空格时,它会给我一个索引越界错误,因为空格使它成为负数。任何帮助都会很好,谢谢。
public static int commonCharacters(String string1, String string2) {
final int alphabetLength = 26;
int count = 0;
int[] counting1 = new int[alphabetLength];
int[] counting2 = new int[alphabetLength];
Arrays.fill(counting1, 0);
Arrays.fill(counting2, 0);
for (char c : string1.toCharArray()) {
c = Character.toLowerCase(c);
counting1[c - 'a']++;
}
for (char c : string2.toCharArray()) {
c = Character.toLowerCase(c);
counting2[c - 'a']++;
}
for(int i = 0; i < alphabetLength; i++) {
System.out.printf(String.valueOf(counting1[i]),counting2[i]);
count += Math.min(counting1[i], counting2[i]);
}
return count == 0 ? 1 :count;
}
}发布于 2021-03-16 15:24:55
以下是对代码的一些更改。您只需使用if语句来检查字符是否为字母表。您不需要Arrays.fill,因为在Java数组中,值被初始化为零。
你写的赋值是关于计算辅音的,但你的代码计算所有常见的字母。
public static int commonCharacters(String string1, String string2) {
final int alphabetLength = 26;
int count = 0;
string1 = string1.toLowerCase();
string2 = string2.toLowerCase();
int[] counting1 = new int[alphabetLength];
int[] counting2 = new int[alphabetLength];
for (char c : string1.toCharArray()) {
if (c < 'a' || c > 'z') {
continue;
}
counting1[c - 'a']++;
}
for (char c : string2.toCharArray()) {
if (c < 'a' || c > 'z') {
continue;
}
counting2[c - 'a']++;
}
for(int i = 0; i < alphabetLength; i++) {
System.out.printf("%c %d %d%n", 'a' + i, counting1[i], counting2[i]);
count += Math.min(counting1[i], counting2[i]);
}
return count;
}https://stackoverflow.com/questions/66649878
复制相似问题