【问题标题】:Setting an initial value outside and inside loop在循环内外设置初始值
【发布时间】:2014-09-08 20:23:13
【问题描述】:

我想知道设置这样的代码有什么真正的区别

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 循环”中设置“int count =0”会有所不同。它不会仍然将 1 添加到 count =0 吗?

【问题讨论】:

  • 是的,但第二个示例中“count”的范围将被限制在 for 循环中。如果你正确地关闭了花括号,你可能会看到:)

标签: java loops


【解决方案1】:

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

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

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

【讨论】:

  • 您仍然应该提到 count 在循环的每一轮中都会重新初始化。他的例子不好,但你应该提供一个方法之外的例子,并解释为什么它不是一回事。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-14
      • 2021-04-14
      • 2014-09-05
      • 2019-01-23
      • 2016-12-23
      相关资源
      最近更新 更多