【问题标题】:Java - my while loop works, but my for loop doesn't - having trouble converting itJava - 我的 while 循环有效,但我的 for 循环没有 - 转换时遇到问题
【发布时间】:2020-02-23 18:51:08
【问题描述】:

我假设如果我不能将我的 while 循环转换为 for 循环,那么我就不能完全理解这里的概念。这是我的工作循环:

(我正在尝试实现一个程序,它计算总和 1+2+3+...+n,其中 n 作为用户输入给出。)

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int number = Integer.valueOf(scanner.nextLine());

        int sum = 0;
        int i = 0;

        while (i < number) {
            i++;
            sum += i;
        }
        System.out.println(sum);

我在这里查看此用户的答案:https://stackoverflow.com/a/36023451/11522261 并尝试实现它,但它不起作用。

.....
for (i = 0; i < number; i++){
            sum += i;
        }
        System.out.println(sum);

看起来 For Init expression statement 和 ForUpdate 的条件设置正确,但我无法理解这里的差异。

此外,这个练习似乎正在尝试教授循环来解决迭代问题。但我怀疑这并没有帮助我练习递归。也许这个问题有一个更好的递归解决方案。只是在这里大声思考。谢谢!

【问题讨论】:

  • 为什么我的问题被否决了?
  • @T.J.Crowder 对,我不想写出来,就像恕我直言最好不要措辞。
  • 如果没有发现问题非常具有挑战性或问题具有示范性,也会发生拒绝投票。这里在对 i 求和之前或之后递增。没什么重要的。

标签: java loops while-loop


【解决方案1】:

不同之处在于,在您的 while 循环中,您将增加 i 在将其添加到 sum,但在您的 for 循环中,它是在之后。

如果 while 产生正确的结果,您可以调整您的 for,从 1 开始而不是 0,然后继续 &lt;= number 而不是 &lt; number。

为了完整起见,以下是您当前的 for 循环的工作方式:

  1. i = 0
  2. 如果i &lt; number 不是为真,则退出循环;否则,继续第 3 步
  3. sum += i(i 仍然是0)
  4. i++
  5. 转到第 2 步

在第二次通过时,i &lt; number 是 1 &lt; number 所以仍然是 true 如果 number 大于 1,所以你转到第 3 步,执行 sum += i 而 i 是 1,然后继续。

最终i &lt; number 不再为真,循环退出。


对于此类问题,最好的方法通常是使用内置于 IDE 中的调试器逐语句逐句执行代码,同时查看变量的值。这可以揭示事情是如何运作良好的。这篇文章可能会有所帮助:How to debug small programs

【讨论】:

    【解决方案2】:

    由于在while 循环中将i 的值添加到sum 之前,您要增加它的值,所以在for 循环中也需要执行相同的操作。下面给出的是使用for 循环的实现:

    for (i = 0; i++ < number; ){
        sum += i;
    }
    System.out.println(sum);
    

    【讨论】:

      【解决方案3】:

      使用

      for (i = 1; i <= number; i++) { 
          sum += i;
      }
      

      【讨论】:

      • @T.J.Crowder 为什么这还不够?在循环中包含或排除零不会影响总和。
      • @khelwood - 啊,你说得很好!因为i 将是0 并且不会影响总和。尽管如此,额外的循环并不理想。但你是对的,这确实解决了问题。
      猜你喜欢
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 2020-06-20
      • 2015-04-17
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多