【问题标题】:Fibonnaci sequence java with limit value具有极限值的斐波那契数列java
【发布时间】:2017-01-18 10:08:06
【问题描述】:

我的 java 程序需要帮助。该程序应该要求斐波那契可以具有的最高值,并打印出该值的系列数,但它不起作用。有什么建议吗?

import java.util.Scanner;

public class Fibonacci {
    public static void main (String[] args){
        Scanner in = new Scanner(System.in);
        System.out.println("The largest number fibonacci can be: ");
        int number = in.nextInt();
        if (number < 0){
            System.out.println("Wrong! Max-value has to be at least 0.");
        }
        int i;
        int f0 = 0;
        int f1 = 1;
        int fn;
        int value=0;
        for (i = 0; i<=value; i++){
            fn = f0 + f1;
            System.out.println("Fibonacci-number " + i + " = " + f0);
            f0 = f1;
            f1 = fn;
            value = number - f0;
        }
    }
}

如果我输入number = 12,程序应该会打印:

fibonacci-number 0 = 0 

...

fibonnaci-number 12 = 144

【问题讨论】:

  • "[...] but it doesn't work" => 这不是一个充分的问题描述。请告诉我们您的期望,以及会发生什么。当您的程序要求用户输入时,请告诉我们您正在测试的输入值。并且 - 最后但并非最不重要的一点 - 开始学习如何debug a Java program
  • 我不明白你的for循环,for (i = 0; i&lt;=value; i++),它只会运行一次,那有什么意义呢?
  • @smoggers 仔细观察,你会发现“值”稍后发生了变化。也就是说,我不确定这个 for 循环是否正确指定。它不应该继续运行直到值达到某个数字吗?

标签: java for-loop fibonacci


【解决方案1】:

只需更改循环以将增量-er (i) 的值与“数字”变量进行比较

for (i = 0; i<=number; i++){
//.........
}

如果您想正确打印系列中更高的数字,也可以使用 double 而不是 int。

没有使用“值”变量。

此外,“斐波那契可以具有的最高值”这一短语具有误导性。您在示例中提到数字表示该系列中的术语数。

如果您希望“数字”成为系列中的最高值,请使用以下方法,

do{

        fn = f0 + f1;
        System.out.println("Fibonnaci-tall " + i + " = " + f0);
        f0 = f1;
        f1 = fn;
        i++;

}while(f0<=number);

【讨论】:

  • 如果我这样做,程序将打印到我输入的数字的序列,而不是它应该的值。
  • 是的,成功了!谢谢你的帮助,我真的很感激。
【解决方案2】:

这就是你要找的吗?

    public static void main(String[] args) {

Scanner in = new Scanner(System.in);
int f0 = 0;
int f1 = 1;
int fn = 0;

System.out.println("The largest number fibonnaci can be: ");
System.out.println("Input your number: ");
int number = in.nextInt();

if (number < 0){
    System.out.println("Wrong! Max-value has to be at least 0.");
} else {
    System.out.println(f0);
    System.out.println(f1);
    while (fn < number){
        fn = f0 + f1;
        f0 = f1;
        f1 = fn;
        if (fn < number){
            System.out.println(fn);
        }
    }
}
}

【讨论】:

  • 不,不完全是。如果我输入 number = 144,则程序在应该打印到 144 时只打印到 89。
  • 所以您希望序列继续直到您达到 144?然后放 while (fn != number)。否则,我不确定您是否了解斐波那契数列的工作原理。
  • 确实,用这个 if (fn
【解决方案3】:

enter image description here

使用这个程序,它会解决你的问题。

【讨论】:

  • 感谢您添加另一个答案,您可以在其中复制粘贴代码,而不是快照。但是请删除这个。谢谢。
【解决方案4】:

试试这个...它有效!

 public static void main (String[] args){
    Scanner in = new Scanner(System.in);
    System.out.println("The largest number fibonacci can be: ");
    int number = in.nextInt();
    if (number < 0){
        System.out.println("Wrong! Max-value has to be at least 0.");
    }
    else{
    int i=0;
    int f0 = 0;
    int f1 = 1;
    int fn;
    int value=0;
   do{
    //for (i = 0; i<=value; i++){
        fn = f0 + f1;
        System.out.println("Fibonacci-number " + i + " = " + f0);
        f0 = f1;
        f1 = fn;
        value = number - f0;
        i++;
    }while(f0<=number);
}//else
}

【讨论】:

    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2015-06-05
    • 2010-12-20
    • 2012-02-16
    相关资源
    最近更新 更多