【问题标题】:How to skip last iteration of while loop in java?如何在java中跳过while循环的最后一次迭代?
【发布时间】:2023-04-07 23:15:01
【问题描述】:

这是我的代码:

System.out.println("Enter upper limit of range");
long u = in.nextLong(), x = 0, y = 1, z = x+y;
System.out.println("Fibonacci Series till " + u + " -");
System.out.print(x + " " + y + " " + z + " ");
while (z < u) {
    x = y;
    y = z;
    z = x + y;
    System.out.print(z + " ");
}

我想跳过最后一次迭代,这样最后输出的数量就不会超出限制。

例如,如果我将u 的值初始化为25,那么它也会打印超出限制的34。跳过最后一次迭代将不会显示数字34

【问题讨论】:

  • 写 u-- 上面 while block

标签: java loops while-loop


【解决方案1】:

在将z 递增到斐波那契数列中的下一个数字之前只需打印:

while (z < u) {
    System.out.print(z+" ");
    x = y;
    y = z;
    z = x + y;
}

通过此更改,最终迭代仍会导致 z 被提升到一个过高的值,并且下一次迭代会失败,但您不会打印此数字。

此重构还解决了您遇到的另一个问题,即不打印斐波那契数列中的第一个数字。通过将 print 语句放在 推进数字之后,z 的初始值将永远没有机会被打印出来。

【讨论】:

  • 谢谢。它有帮助。
【解决方案2】:
while (...) {
   ...
   ...
   if (condition){
      continue; // which skips to the following iteration
      // or
      // break; // which just stops the loop from iterating
}

所以你的情况可能是z&lt;u 或者您可以将打印本身放在 if 子句中

【讨论】:

  • 它不会打印任何内容——因为循环运行的时间与z &lt; u 一样长,所以条件总是计算为真
  • 错误。 z 在打印之前更新,但在进入迭代之后。建议您首先打印的解决方案更好,真实,但仍然 - 这个解决方案也是正确的
  • 没错,这就是我在代码评论中的建议。问题是如何跳过迭代——直接的答案是continue,而不涉及他的意思。在最后一次迭代的情况下,答案确实是break
【解决方案3】:

先打印当前值,再更新z。

System.out.println("Enter upper limit of range");
long u=in.nextLong(),x=0,y=1,z=x+y;
System.out.println("Fibonacci Series till "+u+" -");
System.out.print(x+" "+y+" ");
while(z<u)
{
    System.out.print(z+" ");
    x=y;
    y=z;
    z=x+y;
}

【讨论】:

    【解决方案4】:

    怎么样:

    while(z<u)
     {
        x=y;
        y=z;
        z=x+y;
        if (z < u) {
         System.out.print(z+" ");
        }
    }
    

    这是最简单的解决方案,假设我的问题是正确的......

    【讨论】:

    • 这应该可以工作,但它可能有一个缺点,即必须对循环的每次迭代进行if 检查。对于序列中非常大的值(即迭代次数),可能会降低性能。
    • 你可能是对的,尽管实际上这个开销应该可以忽略不计,即使对于很大的u
    【解决方案5】:
    System.out.println("Enter upper limit of range");
    long u = in.nextLong(), x = 0, y = 1, z = x+y;
    System.out.println("Fibonacci Series till " + u + " -");
    System.out.print(x + " " + y + " " + z + " ");
    
    while (true) {
        x = y;
        y = z;
        z = x + y;
        if(z>u) {
            break;
        }
        System.out.print(z + " ");
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-30
      • 2018-09-18
      • 1970-01-01
      • 2016-10-22
      • 2020-03-29
      • 2013-01-29
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多