Последовательность Фибоначчи в Java, используя для операторов

Я попытался сделать программу на Java, выполняющую последовательность Фибоначчи.

Вот мой код:

import java.io.*;
public class Fibonacci{
    public static void main(String[]args){
        BufferedReader Data=new BufferedReader (new InputStreamReader(System.in));
        int ctr1=0;
        int ctr2=0;
        int num1=0;
        int num2=0;
        int num3=0;
        try{
            System.out.println("How many numbers would you want to see?");
            ctr2=Integer.parseInt(Data.readLine());
            for(int ans=0; ctr1==ctr2; ctr1++){
            num1++;
            System.out.println(num2 + "\n" + num1);
            ans=num1+num2;
            System.out.println(ans);
            ans=num3;
            }
        }catch(IOException err){
            System.out.println("Error!" + err);
        }catch(NumberFormatException err){
            System.out.println("Invald Input!");
        }
    }
}

Очевидно, я новичок в Java и не знаю, как правильно использовать оператор for. Будет ли кто-нибудь достаточно любезен, чтобы заставить мой код работать? Или, может быть, сделать более короткий код, который работает. Я новичок, так что будь крут. Спасибо:)

17 ответов

Серии Фибоначчи в java на самом деле довольно просты и могут быть выполнены с помощью всего одного цикла for!!!!

import java.io.*;
class fibonacci{    
    public static void main() throws NumberFormatException, IOException{  
        BufferedReader Data=new BufferedReader (new InputStreamReader(System.in));
        int a,b,c,d;
        System.out.println("Upto How many numbers do you want to see?");
        d=Integer.parseInt(Data.readLine());
        for  (a=0,b=1,c=a;a<d;c=a,a+=b,b=c){            
            System.out.println(a);        
        }            
    }
}    

Это было сделано с использованием буферизованного считывателя........ Если вы сказали, что используете только буферизованный считыватель, сделайте это, иначе вы можете использовать класс Scanner, который намного проще и удобнее, потому что вам не нужно ловить или бросать любые исключения.....

Программа сканера:-

import java.util.*;
class fibonacci{    
    public static void main(){  
        Scanner sc = new Scanner(System.in);
        int a,b,c;
        System.out.println("Upto How many numbers do you want to see?");
        d=sc.nextInt();
        for  (a=0,b=1,c=a;a<d;c=a,a+=b,b=c){            
            System.out.println(a);        
        }            
    }
}    

Теперь, как я сказал в одном цикле, вы можете это сделать... Вот еще один метод, в котором вы выполняете замену внутри тела цикла, а не в его аргументах... И это намного проще понять новичкам, поскольку Вам не нужно передавать несколько переменных внутри аргументов, и да, это немного дольше

import java.util.*;
class fibonacci{    
    public static void main(){  
        Scanner sc = new Scanner(System.in);
        int a = 0,b = 1,c,d;
        System.out.println("Upto How many numbers do you want to see?");
        d=sc.nextInt();
        System.out.println(a +"\n" +b);//\n is used to go to next line....
        for  (c=0;c<d;c++){  
            c = a + b;//Doing and printing the fibonacci...
            System.out.println(c);     
            a = b;
            b = c;//Swapping the values...
        }            
    }
}    

Итак, здесь я дал вам три метода, которые должны дать одинаковый результат (скорее всего), выберите тот, который вам удобнее.

Надеюсь, что это поможет вам узнать больше о цикле:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

Я знаю, что это не решение вашей проблемы, но я полагаю, что вам не избежать того, чтобы пропустить изучение цикла for. Как только вы это сделаете, кто знает, вы сами решите свою проблему.

Я новичок в Java, но я нашел простой способ создать число Фибоначчи, используя массив. Основным принципом числа Фибоначчи является сложение текущего числа и числа, которое было до этого. Вот мой код:

//Creation of array 
int [ ] fib = new int[size];

//Assigning values to the first and second indexes of array named "fib"
fib [0] = 0;
fib [1] = 1;

//Creating variable "a" to use in for loop
int a = 1

//For loop which creates a Fibonacci number
for( int i = 2; i < size ; i++)
{   
  fib[i] = a;
  a = fib[i] + fib[i-1];
}
Here we get Fibonacci Series up to n.

public static void fibSequence(int n) {
        int sum = 0;
        for (int x = 0, y = 1; sum < n; x = y, y = sum, sum = x + y) {
            System.out.print(sum + " ");
        }
    }

Пример:

Ввод: n = 20

Выход: 0 1 1 2 3 5 8 13

Расширяя ответы, если вы хотите выглядеть действительно круто, используйте рекурсию.

public class Fibonacci {
    public static long fib(int n) {
        if (n <= 1) return n;
        else return fib(n-1) + fib(n-2);
    }

    public static void main(String[] args) {
        int N = 300; // how many numbers you want to generate
        for (int i = 1; i <= N; i++)
            System.out.println(i + ": " + fib(i));
    }
}

Вот поиск Google, что это такое, надеюсь, эти ресурсы помогут: http://bit.ly/1cWxhUS

Это еще один алгоритм, который я нашел в Интернете, и я как бы упростил его код.

public static BigInteger fib(BigInteger x) {
        if (x.intValue() < 0){return x.intValue() % 2 == 0 ?fib(x.multiply(BigInteger.valueOf(-1))).multiply(BigInteger.valueOf(-1)) : fib(x.multiply(BigInteger.valueOf(-1)));}
        int n = Integer.valueOf(x.toString());
        BigInteger a = BigInteger.ZERO,b = BigInteger.ONE;
        for (int bit = Integer.highestOneBit(n); bit != 0; bit >>>= 1) {
            BigInteger d = a.multiply(b.shiftLeft(1).subtract(a));
            BigInteger e = a.multiply(a).add(b.multiply(b));
            a = d;
            b = e;
            if ((n & bit) != 0) {
                BigInteger c = a.add(b);
                a = b;
                b = c;
            }
        }
        return a;
    }

Я знаю, что есть шанс, что вы не поймете, как использовать BigInteger, поэтому я даю вам эту ссылку, просто пытаясь быть полезным.

Вот рабочая версия, которую вы можете использовать в качестве справки для повышения своих навыков: http://crunchify.com/write-java-program-to-print-fibonacci-series-upto-n-number/

Примечание. Это демонстрирует два способа сделать это - один с использованием цикла for, как вы пытаетесь сделать, и один с использованием рекурсии, который более продвинут (и дает вам возможность учиться).:)

Посмотрите на этот фрагмент кода, который намного проще, чем ваш, чтобы понять. Совет по решению прост, вы сохраняете 2 указателя для первых 2 чисел Фибоначчи и соответственно обновляете их в цикле. В приведенном ниже примере цикл выполняется 10 раз, вы можете изменить его по своему усмотрению.

static void fibonacci() {
    int ptr1 = 1, ptr2 = 1;
    int temp = 0;
    System.out.print(ptr1 + " " + ptr2 + " ");
    for (int i = 0; i < 10; i++) {
        System.out.print(ptr1 + ptr2 + " ");
        temp = ptr1;
        ptr1 = ptr2;
        ptr2 = temp + ptr2;
    }
}

Выход:

1 1 2 3 5 8 13 21 34 55 89 144

более простой способ

      public static void main(String[] args) {

    int first = 1;
    int second = 2;
    for (int i = 0; i < 20; i++) {
        if (i == 0)
            System.out.print(first);
        System.out.print("," + second);
        int temp = second;
        second = first + second;
        first = temp;
    }
}```

вывод программы: 1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946

Использование цикла while

class Feb
{
    static void Main(string[] args)
    {
        int fn = 0;
        int sn = 1;
        int tn = 1;

        Console.WriteLine(fn);
        Console.WriteLine(sn);
        while (true)
        {
            tn = fn + sn;

            if (tn >10)
            {
                break;
            }
            Console.WriteLine(tn);
            fn = sn;
            sn = tn;
        }
        Console.Read();
    }
}

Общественный класс Фебоначи {

public static void main(String[] args) {
    int first =0;
    int secend =1; 
    System.out.print(first+","+secend);
    for (int k=1;k<7;k++){
        System.out.print(","+(first+secend ));
        if(k%2!=0)
            first+=secend;
        else 
            secend+=first;
        }
    }
}
public class FibonacciExercitiu {

public static void main(String[] args) {


    int result = fib(6); //here we test the code. Scanner can be implemented.
    System.out.println(result);

}

public static int fib(int n) {

    int x = 1;
    int y = 1;
    int z = 1; //this line is only for declaring z as a variable. the real assignment for z is in the for loop.

    for (int i = 0; i < n - 2; i++) {
        z = x + y;
        x = y;
        y = z;

    }

    return z;
}

/*
1.   F(0) = 1 (x)
2.   F(1) = 1.(y) =>Becomes x for point4
3.(z)F(2) = 2 (z) =>Becomes Y for point4 // becomes X for point 5
4.(z)F(3) = 3                            // becomes y for point 5
5.(z)F(4) = 5 ..and so on
*/

}

import java.util.*;

class MyFibonacci {

    public static void main(String a[]){

         int febCount = 15;
         int[] feb = new int[febCount];
         feb[0] = 0;
         feb[1] = 1;
         for(int i=2; i < febCount; i++){
             feb[i] = feb[i-1] + feb[i-2];
         }

         for(int i=0; i< febCount; i++){
                 System.out.print(feb[i] + " ");
         }
    }
}
import java.util.*;

public class sequence1 
{
    public static void main(String[] args) 
    {
        sequence1 fs=new sequence1();
        fs.fibonacci(); 
    }
    public void fibonacci() 
    {
        int numb1 = 1;
        int numb2 = 1;
        int temp = 0;

        @SuppressWarnings("resource")
        Scanner input=new Scanner(System.in);
        System.out.println("How Many Terms? (Up To 45)");
        int x=input.nextInt();
        x=x-2;

        System.out.println(numb1);
        System.out.println(numb2);

        for (int i = 0; i < x; i++) 
        {
            System.out.println(numb1 + numb2 + " ");
            temp = numb1;
            numb1 = numb2;
            numb2 = temp + numb2;
        }
    }
}
 public static int[] fibonachiSeq(int n)
 {
     if (n < 0)
         return null;

    int[] F = new int[n+1];

    F[0] = 0;
    if (n == 0)
        return F;
    F[1] = 1;

    for (int i = 2; i <= n; i++)
    {
        F[i] = F[i-1] + F[i-2];
    }



    return F;

 }
public class FibonacciSeries {

    public static void main(String[] args) {
        int a=0, c=0, b=1;
        for(int i=0; i<10; i++) {
            System.out.print(c+" ");
            a = c + b;
            c = b;
            b = a;
        }
    }
}

Эта функция возвращает ряд Фибоначчи

/**
     * @param startElement   
     * @param secondElent
     * @param length  :length of fibonacci series
     * @return fibonacciseries : contain the series of fibonacci series
     */
    public int[] createFibonacciSeries(int startElement, int secondElent,
            int length) {
        int fibonacciSeries[] = new int[length];
        fibonacciSeries[0] = startElement;
        fibonacciSeries[1] = secondElent;
        for (int i = 2; i < length; i++) {
            fibonacciSeries[i] = fibonacciSeries[i - 1]
                    + fibonacciSeries[i - 2];
        }

        return fibonacciSeries;
    }
Другие вопросы по тегам