Как проверить массив на наличие чисел Фибоначчи и выписать их?

Есть массив из 20 рандомных чисел в диапазоне (1-100). Проверить массив на наличия чисел Фибоначчи, если есть - выписать!

Результат моей программы(например):

5 6 8 12 15 17 // рандомные числа

Числа Фибоначчи:

5 6 8 12 15 17 // выписывает то же самое

Подскажите, что не так? Алгоритм по нахождению чисел вроде в порядке, может вывожу как то не так?

package pack;
import java.util.Scanner;

public class TablicaLiczb2 {

         Scanner scanner = new Scanner(System.in);
         private int[] tab;
               
        public TablicaLiczb2 (int n) {
            this.tab = new int[n]; 
        }
        
        public void wczytaj () {
            for (int i = 0; i < tab.length; i++) {
                //this.tab[i]=scanner.nextInt();
                tab[i] = ((int)(Math.random()*101)-1);
            }
        }
        
        public void wypisz() {
            for (int x: tab) {
                System.out.print(" " +x);
            }
        }
        
        private boolean liczbyFibonacciego (int x){
            int x1 = 1;
            int y1 = 1;
            for (int i = 3; i < x; i++) {
            y1 = x1 + y1;
            x1 = y1 - x1;
            }
                return true;
        }

        public void wypiszFibonacciego() {
            for (int i=0;i<tab.length; i++) {
                if(liczbyFibonacciego(this.tab[i])) {
                    System.out.printf(" " +this.tab[i]);

            }
        }
    }
}


package pack_main;
import pack.TablicaLiczb2;

public class Main {
     public static void main(String[] args) {
        
        TablicaLiczb2 t = new TablicaLiczb2(10);
            System.out.println("Liczby losowe: ");
            t.wczytaj();
            t.wypisz();
            System.out.println("\n-------------");
            t.wypiszFibonacciego();
    }
}

Ответы (1 шт):

Автор решения: tym32167

пример на C#, но вы легко его переведете на java

Получим все числа фибоначчи до 100

HashSet<int> getFib(int max)
{
    var ret = new HashSet<int>();
    
    int x1 = 0; 
    int x2 = 1;
    
    ret.Add(x1);
    ret.Add(x2);

    while (x2 <= max)
    {
        ret.Add(x2);
        (x1, x2) = (x2, x1 + x2);
    }
    
    return ret;
}

Фильтруем числа и выводим на консоль

var fibs = getFib(100);
var myArray = new int[] {5, 6, 8, 12, 15, 17};

for(int i=0; i<myArray.Length; i++)
{
    if (fibs.Contains(myArray[i]))
        Console.WriteLine(myArray[i]);
}

Результат

5
8
→ Ссылка