首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fibonacci序列检测器Java

Fibonacci序列检测器Java
EN

Stack Overflow用户
提问于 2014-11-01 23:09:35
回答 2查看 679关注 0票数 1

我在我的Intro类的Fibonacci数字程序上遇到了麻烦。只有当我按升序输入数字时,它才能工作。

目标:必须使用while循环,必须检测数字是否是fibonacci数,并且必须检测序列中数字的顺序。如果它不是斐波纳契数,它必须这样说,并告诉它是什么数字之间。程序还必须一直询问输入号,直到用户退出为止。

如何输出的例子:

代码语言:javascript
复制
Please input a number for analysis >> 2
2 is a fibonacci number whose order in the sequence is 4
Please input a number for analysis >> 53
53 is not a fibonacci number 
However, it lies between the Fibonacci numbers 34 (order:10) and 55 (order:11)

我的问题:只有当我按升序输入数字时,程序才能工作。例如,如果我输入5,它告诉我这是一个带有seq的假数字。当我输入2时,它说它不是一个假数,而是介于斐波那契数3(顺序:5)和5(顺序: 6 )之间。当我键入55,它告诉我这是一个谎言的数字。但是,如果不显示不正确的输入,我就不能输入低于55的任何数字。

我认为问题在于其他的if语句,可能是(错误的!= testnum)。或者是伯爵?有人能告诉我问题可能在哪里吗?

代码语言:javascript
复制
import java.util.Scanner;

public class Fibonacci
{
    public Fibonacci()
    {
        int fibhigh = 1;
        int fiblow = 0;
        int count = 2;
        int fibnext = 0;
        Scanner input = new Scanner(System.in);
        boolean quit = false;

        System.out.println("Welcome to Fibonacci Sequence Dectector");
        while(!false)
        {
            System.out.print("Please input a number for analysis >> ");
            int testnum = input.nextInt();

            if(testnum < 0)
            {
                System.out.println("Please enter a positive number");
                continue;
            }
            while(fibnext < testnum)
            {
                fibnext = fibhigh + fiblow;
                fiblow = fibhigh;
                fibhigh = fibnext;
                count++;
            }
            if(fibnext == testnum)
            {
                System.out.println(testnum + " is a fibonacci number whose order in the sequence is " + count);
            }
            else if(fibnext != testnum) System.out.println(testnum + " is not a fibonacci number \nHowever, it lies between the Fibonacci numbers " + fiblow + " (order:" + (count - 1) + ") and " + fibhigh + " (order:" + count + ")");
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-01 23:28:41

您从不重置变量int fibhigh = 1, fiblow = 0, count = 2, fibnext = 0;

您应该移动这个代码片段。

代码语言:javascript
复制
int fibhigh = 1;
int fiblow = 0;
int count = 2;
int fibnext = 0;

在循环开始时:

代码语言:javascript
复制
while (!false) {  }
票数 1
EN

Stack Overflow用户

发布于 2014-11-01 23:24:33

你从来不清理纤维,纤维和纤维。这意味着你每次都会和最高的数字做比较。在用户输入数据之前,应该将值设置为原始数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26694220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档