在循环内分配变量

时间:2016-01-28 17:29:51

标签: java for-loop

下面的代码导致“避免在循环中声明或分配不依赖于循环条件的变量”。 (根据编码最佳实践)

 private void testingLoop() {
    String var[]= {"java", "code", "review"};
    String arr[] = new String[1];
    for(String i : var)
    {
    arr[0] = i.concat("Script");
    }  
    System.out.println("The result is: " +arr[0]);
}

当我们在循环中分配变量时,为什么它被认为是一种不好的做法?解决这个问题的任何解决方案?

注意:我的目的只是为了展示for循环,所以不要过多考虑代码的用途。

4 个答案:

答案 0 :(得分:1)

请注意,局部变量的范围应始终尽可能小。

从维护角度来看,在循环中声明或分配变量优于其他方法。在尽可能最窄的范围内在同一位置声明和初始化变量。不要在声明和初始化之间留下空洞,也不要污染您不需要的命名空间。

更多信息: Declaring variables inside or outside of a loop

答案 1 :(得分:1)

我自己也不太确定,但我可以尝试解决它。​​

您的代码目前正在替换arr数组的值。因此,第一次围绕循环,它存储javaScript,第二次存储codeScript,最后一次存储reviewScript。我唯一的问题是,当你在最后打印它时,它每次只打印reviewScript,因为这是每个循环得到的最后一个String值。

这可能很容易:

private void testingLoop() {
    String var[]= {"java", "code", "review"};

    // No need for this anymore

    // String arr[] = new String[1];
    // for(String i : var)
    // {
    //     arr[0] = i.concat("Script");
    // }  
    // System.out.println("The result is: " +arr[0]);

    int lastIndex = var.length;
    System.out.println("The result is: " + var[lastIndex - 1] + "Script");
}

所以我认为它给出消息的原因是因为你没有理由在for循环中分配任何东西;只获取你var数组中的最后一个元素。您可以concat AFTER 结尾找到var中最后一个元素的索引(尽管可以通过var.length完成,就像我之前提到的那样)。

答案 2 :(得分:0)

尝试:

private void testingLoop() {
    String var[]= {"java", "code", "review"};
    List<String> arr = new ArrayList<String>();
    for(String i : var)
    {
        arr.add(i.concat("Script"));
    }  
    System.out.println("The result is: " +arr[2]);
}

答案 3 :(得分:0)

我认为警告意味着如果你可以在循环之外声明/赋值变量具有相同的结果 - 那么最好这样做一次比N次。

private void testingLoop() {
    String var[]= {"java", "code", "review"};
    String arr[] = new String[1];
    for(String i : var)
    {
    arr[0] = i.concat("Script");
    }  
    System.out.println("The result is: " +arr[0]);
}

相同
private void testingLoop() {
    String var[]= {"java", "code", "review"};
    String arr[] = new String[1];
    arr[0] = var[var.length - 1].concat("Script");
    System.out.println("The result is: " +arr[0]);
}