Последовательность Фибоначчи распечатывает все значения в массиве EDIT - PullRequest
0 голосов
/ 26 сентября 2019

Хорошо, мой новый вопрос - как я могу позволить массиву распечатать все номера сегмента.На данный момент я могу ввести число, и код выведет соответствующее значение в Фибоначчи.Однако я хотел бы, чтобы массив выводил все значения, приводящие к ответу.Ex.Input = 7, массив выводит 0, 1, 1, 2, 3, 5, 8 вместо 8

package math;
public class Fibonacci {
    public static long getFib(int n) {
        long Fibby[] = new long[n+1];
        Fibby[0] = 1;
        Fibby[1] = 1;       
    for(int i = 2; i<=n; i++) {    //initialize loop        
        Fibby[i] = Fibby[i-1] + Fibby[i-2];             
    } // end of for loop
    return Fibby[n];   //end method getfib    
    }
}

И бегун

package math;


         Scanner key = new Scanner(System.in);



        Fibonacci f = new Fibonacci();
        int p;
        System.out.println("Fib value : ");
        p = key.nextInt();

        System.out.println( "Fib Value of "+ p +" :: " + f.getFib(p) );



    }   

Как это может произойти?Мой вопрос был уменьшен.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы не можете запустить свой метод main, потому что System.out.println() ожидает параметр, который он может напечатать.Однако ваш метод fib() возвращает void, поэтому печатать нечего.Добавьте тип возврата к вашему fib() методу, и ваша ошибка в main() будет исправлена.Вот демонстрация печати чисел Фибоначчи от 0 до 12:

FibonacciRunner.java

public class FibonacciRunner
{
    public static void main(String[] args)
    {
        for(int i = 0; i <= 12; i++)
        {
            System.out.println(Fibonacci.fib(i));
        }
        for(int i = 0; i <= 12; i++)
        {
            System.out.println(Fibonacci.fibList(i));
        }
    }
}

Фибоначчи.java

public class Fibonacci
{
    public static long fib(int n)
    {
        long current = 0;
        long next = 1;
        for(int i = 0; i < n/2; i++)
        {
            current += next;
            next += current;
        }
        return n % 2 == 0 ? current : next;
    }
    public static List<Long> fibList(int n)
    {
        List<Long> ret = new ArrayList<>(n == 0 ? List.of(0L) : List.of(0L, 1L));
        long current = 0;
        long next = 1;
        for(int i = 0; i < n/2; i++)
        {
            current += next;
            next += current;
            if(i*2+1 <= n)
                ret.add(current);
            if(i*2+2 < n)
                ret.add(next);
        }
        return ret;
    }
}

Вывод:

0
1
1
2
3
5
8
13
21
34
55
89
144
[0]
[0, 1]
[0, 1, 1]
[0, 1, 1, 2]
[0, 1, 1, 2, 3]
[0, 1, 1, 2, 3, 5]
[0, 1, 1, 2, 3, 5, 8]
[0, 1, 1, 2, 3, 5, 8, 13]
[0, 1, 1, 2, 3, 5, 8, 13, 21]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
0 голосов
/ 26 сентября 2019

Одна проблема с вашим кодом состоит в том, что Fibonacci.fib ничего не возвращает, так что вы ожидаете, что FibonacciRunner напечатает?

Другая проблема заключается в том, что массивы в Java имеют фиксированную длину.Попробуйте вместо List:

List fibby = new ArrayList();
fibby.add(0);
fibby.add(1);
for (int i = 2; i < n; i++){
   fibby.add(fibby.get(i - 1) + fibby.get(i - 2));
}
...