循环中的计数器变量

时间:2016-02-29 17:44:07

标签: loops

在良好的编程设计,速度,效率和内存观点方面,以下哪两个更好?

1)
for(int i=0;i<10;i++)
{
...
}

2)
int i;
...
...
for(i=0;i<10;i++)
{
...
}

我的意思是,如果程序中有很多这样的(或者可能是不同的)循环,那么应该使用哪一个?

7 个答案:

答案 0 :(得分:4)

绝对是第一个。

  1. 更简洁明了;
  2. 变量 i 仅在for block中可见;
  3. 除非你真的需要,否则不要micro-optimize
  4. 引自Java docs

      

    如果在循环之外不需要控制for语句的变量,那么最好在初始化表达式中声明变量。

    在Java 8中,您也可以这样做:

    IntStream.rangeClosed(1, 10).forEach(System.out::println);
    

答案 1 :(得分:1)

(这是针对Java的) 如果要在循环之后/之前访问它,请在循环外使用“int”关键字。但是如果你在外面使用它,我建议使用“while”循环,并每次向int添加一个。您不需要将int变量赋值为0,因为int不能为null,默认情况下为0。

int i;
...
...
...
while (i < ***){
   ...
   i++;
}

第二个变体仅在发生某些事情时断开循环才有用,因此您可以获得稍后发生的迭代次数。

答案 2 :(得分:1)

如果您不需要在循环外访问i,它应该在循环内。如果你将它放在循环中,它会在控件退出循环时被销毁,从而节省内存。将i放在循环中也会使代码更具可读性。

答案 3 :(得分:1)

如果你想在使用之后再次使用i,就像下面的代码一样,那么请选择第二个。

int i;
for (i = 0; i < length; i++) {
  ...
  }
}
if (i > 50) { /* your code */ }

但是,如果你在使用for之后不需要使用'i',那么为了内存使用和简单性,请使用第一个。

答案 4 :(得分:1)

两者都很糟糕,因为他们使用幻数10。:)

至于使用哪个循环,它取决于上下文:变量i是否必须在循环外使用。

如果是,那么我会写

int i;
...
...
i = 0;
for ( ; i < 10; i++ )
{
...
}

答案 5 :(得分:1)

  

在良好的编程设计,速度,效率和内存观点方面,以下哪两个更好?

在Java中你可以使用两者,在C 之前的 ,你只能使用第二种方法。

关于你的问题:

  • 良好的编程设计: 1更好,因为变量x仅用于循环,因此将其封闭在循环范围内将是更好的设计

  • 速度:两者都是相同的

  • 效率

  • 记忆: 1更好,因为变量在循环中使用后很容易被丢弃。

用户Alter Mann提出了关于使用第二种方法的可移植性的一个很好的观点。

答案 6 :(得分:1)

在这种情况下......

  

注意: - 两个程序都没有性能问题...

但是,只有当我们可以讨论i的范围时,如果除了i之外没有loop的要求而且如果不需要,那么第一个循环会更好,那么你应该将其声明为根据你的代码方式