在循环外部和内部设置初始值

时间:2014-09-08 20:23:14

标签: java loops

我想知道设置像这样的代码之间的真正区别

public boolean stringE(String str) {
  int count = 0;
  for (int i =0; i < str.length(); i++) {     
     if (str.charAt(i) == 'e') {
         count += 1;
     }
  }
  return (count >=1 && count<=3 );
}

和这个

public boolean stringE(String str) {
  for (int i =0; i < str.length(); i++) {
    int count = 0;     
    if (str.charAt(i) == 'e') {
      count += 1;
    }
  }
  return (count >=1 && count<=3 );
}

我知道第一个是正确的但是通过在“for loop”中设置“int count = 0”会有什么不同。难道它还不会将1加到count = 0吗?

3 个答案:

答案 0 :(得分:5)

第二种情况不会编译,因为count语句中将无法识别return,因为count变量的范围仅在for内在这种情况下循环。

这就是为什么你必须在count循环之外声明for

第二种情况的另一个问题,如Dici所提到的,是你在循环的每次迭代中将count重置为0,这意味着循环不计算它应该是什么计数。

答案 1 :(得分:1)

在第二种情况下,变量count在for循环外部不可见,因此会在return语句中创建错误。逻辑也是错误的,因为每次都会重置。

答案 2 :(得分:0)

您可以随时尝试 - 在这种情况下,您可能会注意到第二个不会编译。这在语法上是不正确的。

在Java中,当您定义变量时,它只存在于其定义的大括号{}的范围内。如果在循环内定义变量,它只存在于循环内。您不能在其定义的大括号之外使用count

另外,我怀疑第一个程序在语义上是否正确 - 在第一次迭代期间总是return,这不太可能是你想要的。