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

时间:2017-12-27 07:53:02

标签: java loops while-loop

这是我的代码:

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

5 个答案:

答案 0 :(得分:4)

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

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

通过此更改,最终迭代仍然会导致z前进到一个太高的值,并且在下一次迭代时会失败,但您不会打印此数字。

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

答案 1 :(得分:0)

怎么样:

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分: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;
}

答案 4 :(得分: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 + " ");
}