如何在java中跳过while循环的最后一次迭代?

问题描述 投票:0回答: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 (z < u) {
    x = y;
    y = z;
    z = x + y;
    System.out.print(z + " ");
}

我想跳过最后一次迭代,以便最后一个输出数量不超过限制。

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

java loops while-loop
5个回答
4
投票

只需在将z增加到Fibonacci序列中的下一个数字之前打印:

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

有了这个改变,最后的迭代仍然会导致z被提升到一个太高的值,并且在下一次迭代时会失败,但你不会打印这个数字。

这个重构还会解决你遇到的另一个问题,即不在Fibonacci序列中打印第一个数字。通过在推进数字之后放置print语句,z的初始值将永远不会被打印。


0
投票
while (...) {
   ...
   ...
   if (condition){
      continue; // which skips to the following iteration
      // or
      // break; // which just stops the loop from iterating
}

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


0
投票

首先打印当前值,然后更新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;
}

0
投票

怎么样:

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

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


0
投票
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 + " ");
}
© www.soinside.com 2019 - 2024. All rights reserved.