【问题标题】:While loop condition in javajava中的while循环条件
【发布时间】:2015-09-29 11:55:53
【问题描述】:

我正在阅读“Java - Herbert Schildt 的初学者指南”。我希望这个问题不会太荒谬。它是关于 while 循环条件的,其中 while 循环位于 for 循环内。代码示例是这样的:

public static void main(String[] args) {

    int e;
    int result;

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

        result = 1;
        e = i;

        while (e > 0) {

            result *= 2;
            e--;    
        }
        System.out.println("2 to the " + i + " power is " + result);    
    }
}

while (e &gt; 0)之后写的范围内,我不明白e的递减。由于 e = i,并且 i 递增,我相信在第一次执行 for 循环后 e 应该大于 0。如果 e 不递减,程序将无法正常运行。为什么在这个例子中需要递减 e?

【问题讨论】:

  • 因为如果你不这样做,while (e &gt; 0)总是评估为真,所以你将有一个无限循环。
  • If e is not decremented, the program will not run properly. Why is decrementing e necessary in this example? ... 因为如果不递减程序将无法正常运行。你自己回答了这个问题。
  • 如果在e递减后加上System.out.println(e)运行代码,应该就清楚了。

标签: java while-loop conditional-statements


【解决方案1】:

如果你不做e--,你会陷入无尽的while loop

这样看:

让我们进入for 循环的随机迭代。

假设i=5

然后e=i 所以e=5

我们现在跳入while 循环。

while (e >0) {
    result*=2;
    e--;
}

如果我们不执行e--e 将始终保持在 5,while 循环将永远不会终止。

通过执行e--e 将从 5 开始,然后是 4,......然后是 0,while 循环将终止,我们将跳回for 循环,引发i (因此e)并重复整个过程。

【讨论】:

    【解决方案2】:

    他们正在做的是对于 i 的每次迭代,他们将结果乘以 2,i 次。

    演练是

    i = 0,e = 0,结果不相乘,输出2的0次方为1

    i = 1,e = 1,结果乘以2,2的1次方是2

    他们在那里将 e 递减以“向后计数 i”降至 0。E 每次都重置,并且总是在第一次迭代之后进入 while 循环,并且一旦倒计时就会退出 while 循环归零。

    【讨论】:

      【解决方案3】:

      While 循环执行它们的任务,直到给定条件为假。假设 e 开始时大于 0,不递减它会导致它永远循环。

      就程序而言,它递减e以计算2n,这是通过将2n倍加倍来完成的。

      【讨论】:

        【解决方案4】:

        如果 e 没有递减,一旦 for 循环超过 i=0,while 循环将永远执行。这是因为在不改变 e 的值的情况下,e 将总是大于 0。因此,e 必须递减才能满足退出条件。

        【讨论】:

          【解决方案5】:

          简单的单词解释

          在while循环中你需要这样一个语句,因为while 条件变为假并且程序控制出现在一段时间内 循环,这将有助于避免无穷无尽的问题。

          你问过为什么在这个程序中递减 e 很重要?
          答案:如果不递减 e,那么 while(e > 0) 将始终返回真值,程序将进入无限循环(将始终处于 while 循环中)。

          i = 2 时的示例迭代 2:
          结果 = 1
          e = i = 2
          while(e > 0) 计算结果为真
          所以结果 = 1 * 2 = 2
          e-- : e = 1

          while(e > 0) 再次计算为真,因为 e=1 > 0
          结果 = 2 * 2 = 4
          e-- : e = 0

          现在再次检查 while(e > 0),它将评估为 false,while 循环结束。

          有关少量示例的更多信息,请参阅以下链接: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

          【讨论】:

            【解决方案6】:

            让我们考虑一个特定的 for 循环实例,并假设在该实例中 e = 5(这将在 i = 5 时发生)。 因此,我们运行 while 循环,直到 e 大于 0,即 5 次。 这 5 次中的每一次,我们将结果(最初为 1)乘以 2 并更新它。 因此,在 while 循环运行 5 次结束时,我们将完成 2^5,然后我们将 2 打印为 i(5) 的幂。 现在,对于 for 循环的每个值都实现了这个逻辑。

            【讨论】:

              猜你喜欢
              • 2016-03-30
              • 1970-01-01
              • 2013-03-23
              • 2020-11-03
              • 2016-02-14
              • 1970-01-01
              • 1970-01-01
              • 2015-02-27
              • 2017-02-25
              相关资源
              最近更新 更多