我正在使用Java Strings热身在CodingBat中闲逛。
提示符是:
给定一个字符串,返回字符串长度2出现在字符串中的次数以及字符串的最后2个字符的数量,所以" hixxxhi"产量1(我们不会计算最终子字符串)。
last2(" hixxhi")→1
last2(" xaxxaxaxx")→1
last2(" axxxaaxx")→2
我的第一次尝试是:
public int last2(String str) {
String last = str.substring(str.length()-2);
int count = 0;
if (str.length() < 2){
return 0;
}
for (int i = 0; i <str.length()-2; i++){
String sub = str.substring(i,i+2);
if (sub.equals(last)){
count++;
}
}
return count;
}
此代码为所有测试生成了正确的输出,除非输入字符串的长度小于2(输出= Exception:java.lang.StringIndexOutOfBoundsException: String index out of range: -1 (line number:3)
等),这意味着忽略了if
语句。
但是,只需将if
语句移到方法开头的变量声明之上,就可以使代码正确地传递所有测试(甚至长度小于2的字符串):
public int last2(String str) {
if (str.length() < 2){
return 0;
}
String last = str.substring(str.length()-2);
int count = 0;
for (int i = 0; i <str.length()-2; i++){
String sub = str.substring(i,i+2);
if (sub.equals(last)){
count++;
}
}
return count;
}
我觉得变量声明不应该对if
语句的功能产生任何影响......是什么让我的第一次编码尝试无法工作?
答案 0 :(得分:3)
在您的第一个代码段String last = str.substring(str.length()-2);
中,str.length < 2
会抛出异常,因此if语句根本没有执行。
在第二个片段中,您将if语句放在正确的位置。