我正在研究CodingBat exercises for Java。我遇到了以下问题:
给定2个包含字符串的长度相同的数组,将一个数组中的第一个字符串与另一个数组中的第一个字符串进行比较,将第二个字符串与第二个字符串进行比较,依此类推。计算2个字符串非空的次数,并以相同的char开头。字符串可以是任何长度,包括0.
我的代码是:
public int matchUp(String[] a, String[] b){
int count = 0;
for (int i = 0; i < a.length; i++) {
String firstLetterA = a[i].length() == 0
? "ê"
: a[i].substring(0, 1);
String firstLetterB = b[i].length() == 0
? "é"
: b[i].substring(0, 1);
if (firstLetterA.equals(firstLetterB)) {
count++;
}
}
return count;
}
我的问题是:哪个&#39;占位符&#39;在firstLetterA
和firstLetterB
之间进行不必要的比较时,将字符视为良好做法?
在这种情况下,我只分配了两个很少使用的不同字母(至少用英文)。我尝试使用''
(空字符,而不是空格)但当然,它们相互匹配。我也尝试使用null
两者,因为我认为它无法进行正面比较,但这也会导致问题。
答案 0 :(得分:9)
一个好的做法 - IMO - 是扩展if
条件而不是使用任何虚拟角色:
for (int i = 0; i < a.length; i++) {
if (!a[i].isEmpty() && !b[i].isEmpty() && a[i].charAt(0) == b[i].charAt(0)) {
count++;
}
}
答案 1 :(得分:0)
这是替代解决方案。
。
public static int matchingChar(String[] a, String[] b) {
int count=0;
for(int i=0;i<a.length;i++) {
for(int j=0;j<b.length;j++) {
if(i==j && a[i].length()!=0 && b[i].length()!=0) {
if(a[i].startsWith(b[i].substring(0,1))) {
count++;
}
}
}
}
return count;
}
希望有帮助
答案 2 :(得分:0)
public int matchUp(String[] a, String[] b) {
int count = 0;
for(int i=0;i<a.length;i++)
{
if(a[i].equals("") || b[i].equals(""))
continue;
if(a[i].charAt(0) == b[i].charAt(0))
count++;
}
return count;
}
当数组的当前元素为空时,继续下一个元素。