【问题标题】:Java for loop with condition not incrementing条件不递增的Java for循环
【发布时间】:2015-11-08 08:10:42
【问题描述】:

这可能是一个愚蠢的问题,但我很困惑。

我有一个排除给定迭代(随机数)的 for 循环。它适用于选择的任何大于 0 的随机数。但是,如果它为零,则它永远不会进行单次迭代:

int x;
for (x = 0; ((x < 2) && (x != r)); x++) {
    // do something if (x != r)

}
System.out.println("X : " + x);

对于它不工作的例子,r = 0。 这不应该意味着它应该跳过第一次迭代但第二次吗?

上面的 println 产生 "X : 0"。

有什么帮助吗?谢谢!

【问题讨论】:

  • 它从不进行单次迭代,因为您需要 x != r 而您的 x 首先设置为 0,例如您的 r,导致您的条件返回 false 而不是输入循环
  • 因为条件 (x
  • 不,第二个表达式用作结束循环的一种方式。如果表达式计算结果为假,则退出循环:docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html
  • 哦,我现在明白了。愚蠢的错误!感谢大家的帮助。
  • @tj56 当第一个条件(第二个表达式)为假时,循环存在,循环结束后继续执行。

标签: java for-loop


【解决方案1】:

如果您只想跳过第一次迭代,则必须将x != r 条件移动到循环内。在循环条件中包含x != r 条件意味着如果rx 都初始化为0,则永远不会进入循环,因为循环在循环条件变为假时终止。

for (x = 0; x < 2; x++) {
    if (x != r) {
    // do something if (x != r)
    }
}

【讨论】:

  • 变量 r 是随机选择的,因此它可能并不总是第一次迭代。但是假设它总是 0,为什么它不能像我上面发布的那样工作?
  • @tj56 我添加了一个解释。如果循环的条件为假,则终止循环。如果在第一次迭代之前为 false,则永远不会进入循环。
【解决方案2】:
for (initialization; termination condition; increment) {
    statement(s)
}

上面的代码将运行:

    initialization
    termination condition
    statement
    increment

    termination condition
    statement
    increment

    termination condition
    statement
    increment

    ....

所以你应该删除条件x != r,因为在它第一次运行语句之前,它会检查那个条件并返回false。

你应该注意到这一点。没有条件x != r,您的循环仅运行两次:x = 0 和 x = 1。也许在您的代码中,这些值(0 和 1)不会输出任何值。

【讨论】:

    【解决方案3】:

    我认为如果你放置会很棒 (r >= 0) 然后将直接从 0 中挑选随机数生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2011-01-20
      相关资源
      最近更新 更多