我仍然对局部变量的范围感到困惑 这段代码不起作用,因为我在" i& N'#34;没有解决。我已经在for循环中将其识别为int i = 0。这还不够吗? (这是我们的字符串中添加第n个字符)。
public String everyNth(String str, int n) {
String result = "";
for (int i = 0; i <= str.length(); i++); {
if (i%n == 0) {
result = result + str.charAt(i);
}
else {
result = result;
}
}
return result;
}
答案 0 :(得分:1)
为了扩展Jon Skeet的回答值得注释,for (int i = 0; i <= str.length(); i++);
末尾的分号结束了for-statement,我在分号后不再处于范围内。
答案 1 :(得分:1)
你有几个错误:
您可以删除else {...}部分,因为您不需要它。
你有一个额外的';'在你的for循环语句中。
for循环的索引有错误。你需要做'我小于'str.length(),而不是i&lt; = str.length()。基本上你的for循环将尝试访问你的字符数组的全长索引,但实际上它超过了长度。例如,字符串'hello'的索引是0,1,2,3,4。但是“hello”。length()实际上是5.如果您尝试访问字符串的第5个索引,您将看到“ java.lang.StringIndexOutOfBoundsException ”异常。
另外,你想要每个第N个值,你想做(i-1)%n。再次,这是因为索引问题。尝试插入逻辑中的参数并使用铅笔记下结果,您将看到原因。
当然,当i == 0时,你不希望(0-1)%n发生。所以通过添加'i!= 0'来跳过i == 0。
现在,以下是工作代码:
public static String everyNth(String str, int n) {
String result = "";
for (int i = 0; i < str.length(); i++) {
if ((i-1)%n == 0 && i!=0)
result = result + str.charAt(i);
}
return result;
}