2016-04-11 15 views
1

私はすべてのフィボナッチ数を出力するプログラムをプログラムしようとしています。しかし、私の数値は常にfib(2)から始まり、next()を使って次のフィボナッチ数を求めます。私の機能に無限ループが生じるのはなぜですか?

public class Fibonacci { 
static int NextCounter = 2; // fib(2) 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    System.out.println("Enter your number!"); 
    try { 
     FibonacciPrint(System.in.read()); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static void FibonacciPrint (int a){ 
    for(int i = 0 ; i < a ; i++){ 
     System.out.println(next()); // Will never stop? 
    } 
} 

private static int next() { 
    int result = fibo(NextCounter); 
    NextCounter += 1; 
    return result; 
} 

private static int fibo (int n){ 
    if(n == 1 || n == 2) 
    { 
     return 1; 
    } 

    return fibo(n-1) + fibo (n-2); 
} 

} 

私は、forループがaと等しいときに停止することを期待しています。あなたはすでに知っているように、それはしません。どうして ? next()とfibo()が正しく動作しています。助けてくれてありがとう。私は秒後に停止し、実行した後

結果:

Enter your number! 
5 // Input 
1 
2 
3 
5 
8 
13 
21 
34 
55 
89 
144 
233 
377 
610 
987 
1597 
2584 
4181 
6765 
10946 
17711 
28657 
46368 
75025 
121393 
196418 
317811 
514229 
832040 
1346269 
2178309 
3524578 
5702887 
9227465 
14930352 
24157817 
39088169 
63245986 
102334155 
+0

まず最初に、あなたのコードは** catch **(IOException e){} 'を持つべきではありません。目を閉じて車を運転しますか? –

+0

何か印刷しますか? 'a'の価値は何ですか?あなたはそれを踏み出そうとしましたか? – Blorgbeard

+0

@Blorgbeardはい、すべてのフィボナッチ数を取得します。 Aはユーザー入力でなければなりません。 – urson88en

答えて

3

問題がSystem.in.read()です。これはbyteとなります。たとえば、8と入力すると、'8'の文字はintの値56に変換され、プログラムは56フィボナッチの数値を計算します(メモ帳を使用しないため、非常にゆっくりとします)。

ではなく

FibonacciPrint(new Scanner(System.in).nextInt()); 

を試してみてください。

+0

ああああ!あなたが正しいです。これは今働いています。どうもありがとうございました。 – urson88en

+0

問題ありません - 私は助けてうれしいです。 –

関連する問題