Java 斐波那契数列中的第n个数

Java 斐波那契数列中的第n个数,java,while-loop,Java,While Loop,我不知道如何打印,斐波那契序列中的数字是(第n个数字)。粗体文本是我遇到的问题,我必须使用while循环 请输入一个数字进行分析>>1 1是一个斐波那契数,其在序列中的顺序为2和3。 请输入一个数字进行分析>>56 55不是斐波那契数但是56介于11和12之间。 这是我的密码 import java.util.Scanner; public class While { public static void main(String[] args) { System.out.println("We

我不知道如何打印,斐波那契序列中的数字是(第n个数字)。粗体文本是我遇到的问题,我必须使用while循环

请输入一个数字进行分析>>1 1是一个斐波那契数,其在序列中的顺序为2和3。

请输入一个数字进行分析>>56 55不是斐波那契数但是56介于11和12之间。

这是我的密码

import java.util.Scanner;
public class While
{
public static void main(String[] args) 
{
System.out.println("Welcome to the Fibonacci Sequence Detector\n\n");
Scanner in = new Scanner(System.in);    
System.out.print("Please input a number for analysis: ");
int input = in.nextInt();

int fib = 0;
int fib1 = 1;
int n;
while(true)
{
    n=fib+fib1;
    if(input == fib1)
    {
        fib = -1;
        break;
    }
    if(input>fib1 && input < n)
    {
        break;
    }
    fib = fib1;
    fib1=n;
}
if (fib == -1 || input == 0)
    System.out.println(input+" is a Fibonacci number whose order in the sequence is " );
    else
    System.out.println(input+ " is not a Fibonacci number" );


} 
}
import java.util.Scanner;
公共课
{
公共静态void main(字符串[]args)
{
System.out.println(“欢迎使用斐波那契序列检测器\n\n”);
扫描仪输入=新扫描仪(系统输入);
System.out.print(“请输入一个数字进行分析:”);
int input=in.nextInt();
int-fib=0;
int fib1=1;
int n;
while(true)
{
n=fib+fib1;
如果(输入==fib1)
{
fib=-1;
打破
}
如果(输入>fib1&&input
我能想到的最简单的方法是有一个计数器变量,每次都递增

while(true) {
    count++;
...
}
...
System.out.println(input+" is a Fibonacci number whose order in the sequence is "+count);

作为旁注,您使用
while(true)
有什么原因吗?通常有一种方法可以跟踪希望停止循环的情况。(有人告诉我,
while(true)
并不总是错的,但通常是错的。):

斐波那契序列有一个封闭形式,所以不必搜索到你感兴趣的数字。可以直接计算第n个斐波那契数,并找出给定数在序列中的位置

public class Fibi {
    public static void main(String[] args) {
        double root5 = Math.sqrt(5);
        double phi = (1.0 + root5) / 2.0;
        double log_phi = Math.log(phi);

        for (String s : args) {
            long fib = Long.parseLong(s);
            long n = (long) Math.floor(Math.log(fib * root5) / log_phi);
            long nth = Math.round(Math.pow(phi, n) / root5);
            long next = Math.round(Math.pow(phi, n+1) / root5);
            if (fib == nth) {
                System.out.printf("%d is a Fibonacci number whose order is %d.%n",
                    fib, n);
            } else if (fib == next) {
                System.out.printf("%d is a Fibonacci number whose order is %d.%n",
                    fib, n+1);
            } else {
                System.out.printf("%d is not a Fibonacci number. " +
                    "However, %d is between %d and %d.%n", fib, fib, n, n+1);
            }
        }
    }
}
如果使用java Fibi 102334155运行此程序,它将输出:

102334155 is a Fibonacci number whose order is 40.

请注意,我没有实现
1
,它在序列中出现两次,可以作为一个特例轻松处理,并且我稍微更改了索引的编号。在位置2和3有1,在位置11有55,这意味着你认为0是斐波那契序列中的第一个数字,我通常认为它是从
11
开始的。不过,这可以通过一个小改动来解决。

看起来像是一个家庭作业;)是的,我一直在读小谎。我想while循环里面到底有什么必须是真的?当用户输入的信息太多时,我怎么退出程序
boolean on=true while(on){//如果(userInput.equals(“quit”){on=false;}
用户输入'quit'时,这几乎就是如何退出的。在
while(on)中,将扫描器声明后的所有内容括起来
loop,你应该是金黄色的。谢谢!我更改了代码,它工作得很好,但当用户输入“quit”时,我无法让程序退出@DavidConrad