【问题标题】:While loop is executing one time more as expectedWhile 循环按预期多执行一次
【发布时间】:2023-06-23 03:53:01
【问题描述】:
public class fibonacci
{
    public static void main(String[] args)
    {
        int a=0,b=1,c=2;
        while(a<4000000)
        {
            a=b;
            b=c;
            c=a+b;
            System.out.println(a);
        }
    }   
}

试图打印小于 400000 的斐波那契数列,但它也在打印 5702887。

【问题讨论】:

  • 因为你在打印之前增加了a, b, c
  • 在数学上,斐波那契数列是这样开始的:1, 1, 2, 3...。但从程序员的角度来看,序列从零开始:0, 1, 1, 2, 3...我建议你花几分钟阅读this

标签: java while-loop


【解决方案1】:

重新排列打印和检查,使两者作用于相同的值

int a=1,b=1,c=2;
while(a<4000000)
{
    System.out.println(a);
    a=b;
    b=c;
    c=a+b;        
}

这会输出斐波那契序列,开头有两次“1”。
如果您想要“1、2、3...”,请使用

int a=1,b=2,c=3;

【讨论】:

  • 非常好。来自我的 +1。
【解决方案2】:

斐波那契数列从 1 开始。看this。我为您的代码提供了解决方案。 在检查a&lt;4000000 后设置a=b。那你需要和b核实一下。

int a=0,b=1,c=2;
    while(b<4000000)
    {
        a=b;
        b=c;
        c=a+b;
        System.out.println(a);
    }

【讨论】:

  • 它取决于我要打印的位置
【解决方案3】:

您的代码很好,您所要做的就是在计算下一个数字之前放置打印语句因为3524578 &lt;5702887

【讨论】:

  • 请突出显示此答案的附加见解,与其他答案相比,尤其是在检查之前已经提议打印的答案(诚然是我的)。您可能想提及不同的行为,在您的提案将打印的附加“0”中很明显,并参考包含该附加初始数字的斐波那契数列的定义。讨论 OP 想要的序列的开始(斐波那契与否)可能有助于理解后果。
最近更新 更多