Последовательность Фибоначчи распечатывает все значения в массиве РЕДАКТИРОВАТЬ

Хорошо, мой новый вопрос заключается в том, как я могу позволить массиву распечатать все числа сегмента. На данный момент я могу ввести число, и код выведет соответствующее значение в Фибоначчи. Однако я хотел бы, чтобы массив распечатывал все значения, ведущие к ответу. Бывший. Ввод = 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) );



    }   

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


person king    schedule 26.09.2019    source источник
comment
Что должен делать package math? Весь код, который вы показываете, является базовым java. Кроме того, что такое radius и height? (ваш код их не использует, числа Фиббоначчи их точно не используют, почему они в сигнатуре и вызове метода?)   -  person Mike 'Pomax' Kamermans    schedule 26.09.2019
comment
Что значит бегун? Запускаемый?   -  person Goion    schedule 26.09.2019
comment
из кода похоже, что они имеют в виду основной класс, который становится исполняемым   -  person Mike 'Pomax' Kamermans    schedule 26.09.2019
comment
У меня есть полные ошибки Если у вас есть ошибки, вы должны опубликовать их здесь.   -  person takendarkk    schedule 26.09.2019
comment
Ох, хорошо. Бегун = основной класс   -  person Goion    schedule 26.09.2019
comment
Где вы поместите ввод, и программа поместит вывод места этой части последовательности. В основном методе public static void main( String[] args )   -  person Goion    schedule 26.09.2019


Ответы (2)


Вы не можете запустить свой основной метод, потому что 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]
person Avi    schedule 26.09.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));
}
person Simon Crane    schedule 26.09.2019
comment
Составление списка — крайне плохая идея для вычисления n-го числа Фибоначчи и отличная идея для вычисления чисел Фибоначчи от 1 до n. Как и сейчас, кажется, что он хочет вывести место этой части последовательности, которая, вероятно, указывает на n-е число Фибоначчи. Им нужны только две переменные для вычисления n-го числа Фибоначчи, а не список. - person Avi; 26.09.2019