2013-08-01 72 views
1

我寫了一個程序來顯示在java中的斐波那契數列,但現在我想序列中的數字以十進行顯示,這是前一行中的前十個斐波納契數字,在下一行等..... 我一直有真正的問題,使這一可能性。打印斐波那契數字在十行中逐行

這是程序:

import java.util.Scanner; 
import java.math.BigInteger; 

class Fibonacci { 

public static void main(String args[]) { 


    System.out.print("Enter number upto which Fibonacci series to print: "); 
    int number = new Scanner(System.in).nextInt(); 

    System.out.println("\n\nFibonacci series upto " + number + " numbers : "); 

    for (int i = 1; i <= number; i++) { 

     System.out.println(fibonacciLoop(i) + " "); 
    } 
} 

public static BigInteger fibonacciLoop(int number) { 
    if (number == 1 || number == 2) { 
     return BigInteger.valueOf(1); 
    } 
    for (int x = 1; x <= number; x++){ 
     return BigInteger.valueOf(x); 
    } 
    BigInteger fibonacci = BigInteger.valueOf(1); 
    BigInteger fibo1 = BigInteger.valueOf(1); 
    BigInteger fibo2 = BigInteger.valueOf(1); 
    for (int i = 3; i <= number; i++) { 
     fibonacci = fibo1.add(fibo2); 
     fibo1 = fibo2; 
     fibo2 = fibonacci; 
    } 
    return fibonacci; 
} 
} 
+3

這是功課? –

+0

BigInteger.valueOf(1)= BigInteger.ONE; –

+1

您的斐波那契循環中的第一個循環已損壞。它會在第一個2之後爲每個值返回3. –

回答

0

請注意,您的Fibonaci計算不會因爲for循環以下工作:

for (int x = 1; x <= number; x++){ 
     return BigInteger.valueOf(x); 
    } 

後續會做你要求什麼:

import java.math.BigInteger; 
import java.util.Scanner; 
import java.util.LinkedList; 


public class Test { 

    Test(int number) { 
     System.out.println("\n\nFibonacci series upto " + number + " numbers : "); 
     LinkedList<BigInteger> list = new LinkedList<BigInteger>(); 
     for (int i = 1; i <= number; i++) { 
      list.add(fibonacciLoop(i)); 
      if(list.size() == 10) { 
       printFibo(list); 
       list = new LinkedList<BigInteger>(); 
      } 
     } 
     if(!list.isEmpty()) printFibo(list); 
    } 

    public static void main(String args[]) { 
     System.out.print("Enter number upto which Fibonacci series to print: "); 
     new Test(new Scanner(System.in).nextInt()); 
    } 

    private void printFibo(LinkedList<BigInteger> list) { 
     for(BigInteger fiboNumber : list) { 
      System.out.print(fiboNumber + " "); 
     } 
     System.out.println(""); 
    } 

    public BigInteger fibonacciLoop(int number) { 
     if (number == 1 || number == 2) { 
      return BigInteger.valueOf(1); 
     } 
     BigInteger fibonacci = BigInteger.valueOf(1); 
     BigInteger fibo1 = BigInteger.valueOf(1); 
     BigInteger fibo2 = BigInteger.valueOf(1); 
     for (int i = 3; i <= number; i++) { 
      fibonacci = fibo1.add(fibo2); 
      fibo1 = fibo2; 
      fibo2 = fibonacci; 
     } 
     return fibonacci; 
    } 
} 
8

print(不println)每個號碼,讓他們在同一行。只要你的計數器i是10的倍數,就開始一個新行。

for (int i = 1; i <= number; i++) { 
    System.out.print(fibonacciLoop(i) + " "); 
    if (i % 10 == 0) 
     System.out.println(); 
} 
+0

非常感謝Dennis ...你是一個拯救生命的人。 – david

+0

@davidkez高興地幫忙。如果有幫助請接受答案。謝謝。 –

+0

這真的很有用,它的工作......再次感謝 – david

2
if(i % 10 == 0) 
{ 
    System.out.println(); 
} 

或者,如果你想成爲幻想。

System.out.print(fibonacciLoop(i) + " " + (i % 10 == 0? "\n":"")); 
+1

花式應該避免,如果它使您的代碼基本上不可讀,尤其是對於沒有多年經驗的程序員。 –

+0

非常感謝克里斯.....它工作完美 – david

+0

@DennisTraub我知道,但鑑於我的答案已經提供,我想我會添加一些新的東西,只爲未來的讀者。雖然幻想是不鼓勵的,但知道它是很好的,因爲當有人使用它時。 – christopher