【发布时间】:2015-10-29 14:44:12
【问题描述】:
我正在 CodingBat 中玩 Java 字符串热身。
提示是:
给定一个字符串,返回一个长度为 2 的子字符串在字符串中出现的次数,并且作为字符串的最后 2 个字符,所以 "hixxxhi" 产生 1(我们不会计算结束子字符串)。
last2("hixxhi") → 1
last2("xaxxaxaxx") → 1
last2("axaxaaxx") → 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 语句的功能产生任何影响......是什么让我的第一次编码尝试无法工作?
【问题讨论】:
标签: java string if-statement