Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在循环内分配变量_Java_For Loop - Fatal编程技术网

Java 在循环内分配变量

Java 在循环内分配变量,java,for-loop,Java,For Loop,下面的代码导致“避免在循环中声明或分配不依赖于循环条件的变量”。(根据编码最佳实践) 为什么在循环中分配变量会被认为是一种不好的做法?有什么办法可以解决这个问题吗 注:我的意图只是显示for循环,所以不要太多考虑代码的用途。 : private void testingLoop() { String var[]= {"java", "code", "review"}; List<String> arr = new ArrayList<String>();

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

为什么在循环中分配变量会被认为是一种不好的做法?有什么办法可以解决这个问题吗

注:我的意图只是显示for循环,所以不要太多考虑代码的用途。

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]);
}
private void testingLoop(){
字符串var[]={“java”,“code”,“review”};
List arr=new ArrayList();
for(字符串i:var)
{
arr.add(i.concat(“脚本”);
}  
System.out.println(“结果是:“+arr[2]);
}

我想警告意味着,如果您可以在循环外声明/分配具有相同结果的变量,那么最好执行1次,而不是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]);
}

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

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

如需更多参考:
我自己也不太确定,但我可以试着试一试

您的代码当前正在替换
arr
array的值。因此,第一次循环时,它存储
javaScript
,第二次循环时,
codeScript
,最后一次循环时存储
reviewScript
。我唯一的问题是,当您在最后打印它时,每次只打印
reviewScript
,因为这是for each循环得到的最后一个字符串值

这也很容易做到:

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
数组中的最后一个元素。在找到
var
中最后一个元素的索引后,您可以在
concat
结尾处找到
var
(尽管这可以通过
var.length
完成,就像我前面提到的那样)。

我不想将其更改为List,因为在我的代码后面,我将其发送到一个需要字符串的方法。我已经经历了这一点,我理解为什么在循环外声明变量更好,但我在这里赋值。你说的“但我在这里赋值”是什么意思?@HookUp我理解为什么在循环外声明变量更好:这个答案与你所理解的完全相反,这是正确的。在循环中声明变量更好,因为变量的作用域更小:这使得代码更容易重构,并且为bug留下更少的空间。@JBNizet:是的,您是正确的!但是我假设这取决于你是在循环外使用变量还是在循环内使用变量。这是有效的!!谢谢大家的宝贵意见。有时你可能会在评论中争论,然后你会记得没有人在评论中改变过任何人的想法。然后你开始点名,因为你已经没有什么可以争论的了。然后你会意识到,这些词都是短暂的,并不存在于物质上。然后你会意识到你的整个工作都是由移动非物理的部分组成的。然后你意识到有一个完整的家庭手工业围绕着解决现实世界中不存在的问题而建立起来。然后你就伤心了。别难过。不要争辩。
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");
}