2016-04-11 46 views
1

Tamam Her Fibonacci numarasını verecek bir program programlamaya çalışıyorum. Ancak sayılarım her zaman fib ile başlayacaktır (2) ve sonraki Fibonacci numarasını almak için sonraki() kullanacağım.Neden işlevimde sonsuz bir döngü olsun?

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); 
} 

} 

Bu nedenle, for döngüsünün bir a eşit olacağı zaman duracağını umuyorum. Bildiğiniz gibi belki de olmaz. Niye ya ? sonraki() ve fibo() doğru çalışıyor. Yardım ettiğiniz için teşekkür ederim. Bir saniye sonra durdu bir koşudan sonra

Sonuçlar:

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

Her şeyden önce, kodunuz ** asla ** olmalıdır: 'catch (IOException e) {}' - boş catch blokları, ** hiç **. Arabanı gözlerin kapalıyken mi sürüyorsun? –

+0

Herhangi bir şey yazdırıyor mu? A'nın değeri nedir? Bunu denemeyi denediniz mi? – Blorgbeard

+0

@Blorgbeard Evet, her Fibonacci numarasını alacağım. A kullanıcı girişi olmalıdır. – urson88en

cevap

3

sorun System.in.read() olduğunu. Bu byte okur. Örneğin, 8 girerseniz, '8' karakteri 56 değerine dönüştürülecektir ve programınız 56 fibonacci sayısını hesaplar (çok yavaş bir şekilde not almadığınız için).

yerine

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

deneyin.

+0

Oh evet! Haklısın. Bu şimdi çalışıyor. Çok teşekkür ederim. – urson88en

+0

Sorun değil, yardımcı olabileceğime sevindim. –

İlgili konular