2016-01-28 98 views
2

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

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循环,因此不要考虑代码的目的。

+0

有时你可能会在评论中引发争论,然后你会记得在评论中没有人改变过任何人的想法。然后你开始打电话,因为你已经用完了一些争论的事情。然后你意识到,这些话都是短暂的,并不存在于身体上。然后你意识到你的整个工作包括移动非物理位。然后你意识到整个山寨产业围绕着解决实际上并不存在的问题而建立起来。然后你很伤心。不要伤心。不要争辩。 –

回答

0

我想警告意味着,如果你可以声明/分配变量外循环具有相同的结果 - 那么它是更好地做了N次1次。

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]); 
} 
+0

这工作!感谢大家的宝贵意见。 – HookUp

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]); 
} 
+0

我不想将它更改为List,因为稍后在我的代码中,我将它发送给期望String的方法。 – HookUp

1

注意局部变量的范围应该永远是最小的。

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

更多全球化志愿服务青年: Declaring variables inside or outside of a loop

+0

我已经经历了这一点,我明白为什么在循环外声明变量更好,但在这里我正在分配。 – HookUp

+0

你是什么意思'但我在这里分配'? – GroundIns

+0

@HookUp *我明白为什么在循环之外声明变量更好的原因*:这个答案正好说明了你所理解的内容,并且它是正确的。在循环中声明变量会更好,因为变量的范围更小:这使得代码更容易重构,并且留下更少的空间。 –

1

我不是太肯定自己,但我可以尝试在它有一个裂缝。

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

这可能已经很容易了:

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像我之前提到的那样)完成索引。