下面的代码导致“避免在循环中声明或分配不依赖于循环条件的变量”。 (根据编码最佳实践)
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 :(得分:1)
请注意,局部变量的范围应始终尽可能小。
从维护角度来看,在循环中声明或分配变量优于其他方法。在尽可能最窄的范围内在同一位置声明和初始化变量。不要在声明和初始化之间留下空洞,也不要污染您不需要的命名空间。
答案 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]);
}