局部变量的范围

时间:2014-09-12 19:34:42

标签: java loops variables local

我仍然对局部变量的范围感到困惑 这段代码不起作用,因为我在" 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;           
}

2 个答案:

答案 0 :(得分:1)

为了扩展Jon Skeet的回答值得注释,for (int i = 0; i <= str.length(); i++);末尾的分号结束了for-statement,我在分号后不再处于范围内。

答案 1 :(得分:1)

你有几个错误:

  1. 您可以删除else {...}部分,因为您不需要它。

  2. 你有一个额外的';'在你的for循环语句中。

  3. for循环的索引有错误。你需要做'我小于'str.length(),而不是i&lt; = str.length()。基本上你的for循环将尝试访问你的字符数组的全长索引,但实际上它超过了长度。例如,字符串'hello'的索引是0,1,2,3,4。但是“hello”。length()实际上是5.如果您尝试访问字符串的第5个索引,您将看到“ java.lang.StringIndexOutOfBoundsException ”异常。

  4. 另外,你想要每个第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;           
    }