2012-11-20 3 views
0

나는 fibonacci 시퀀스를 표시 할 수있는 프로그램을 작성하려고했습니다. 그러나 내가 입력 한 모든 숫자는 0을 출력 할 것입니다. 변수의 범위 또는 내 반환에 문제가있는 것으로 의심됩니다. 누군가가 내 코드를보고 정말로 그 문제인지 파악할 수 있습니까? 나는 일종의 자바에 익숙하지 않기 때문에 기본도 어렵다.범위, 메서드 반환

public static void main(String args []) 
    { 
    Scanner in = new Scanner(System.in); 

    int number = 0; 

    do{ 
     System.out.print("Which Fibonacci Number would you like? "); 
     fib = in.nextInt(); 
    }while(number < 0 || number > 71); 

    System.out.print("Fibonacci #"+number+" is "+fibcalc(fib)+"\n"); 
} 

public static double fibcalc(double number) 
{ 
    double prevNumber1 = 0; 
    double prevNumber2 = 1; 
    double fib = 0; 

    for(int i =0; i < number; i++){ 
     fib = prevNumber1; 
     prevNumber1 = prevNumber2; 
     prevNumber2 = fib + prevNumber2; 

} 
    return fib; 
} 

일부 오류가 발생했습니다.

error: cannot find symbol 
    System.out.print("Fibonacci #"+number+" is "+fibcalc(fib)+"\n"); 
    symbol: variable fib 

나는 qucik 질문이 있습니다. 하나의 메소드가 변수에 대해 다른 메소드를 호출 할 수 있습니까? 변수는 중괄호 안에 있습니다. 나는 내 코드에서 가지고있는 것의 종류. 내 오류의 대부분이 이것과 비슷하다고 생각됩니다.

답변

5

범위와는 관계가 없습니다. 이 코드를보고 : 당신은 모두 "실행 반복 횟수 '와'현재의 결과"로 fib 변수를 사용하고

while(i < fib){ 
    fib = prevNumber1; 
    ... 
} 

. 그것들은 두 개의 분리 된 개념이고 별도의 변수에 저장되어야합니다. 특히

는 첫 번째 반복에 fib0로 설정되고 i 0

나는 또한 당신의 매개 변수를 변경 좋을 것 반환하므로 루프 후 종료됩니다 ... 1로 증가합니다 int을 입력하고 피보나치 수 변수에 대해 long 또는 BigInteger을 사용하십시오 (지원할 범위에 따라 다름). 정수가 아닌 값을 필요로하는이 문제의 부분이 없기 때문에 double을 전혀 사용하지 않아야합니다.

마지막으로, 나는 while 루프 대신 for 루프를 사용하는 것이 좋습니다 것입니다 - 당신이 반복 주어진 수, 그리고 자바로 작성하는 관용적 인 방법을 수행 할 것은 다음에 대한

for (int i = 0; i < count; i++) { 
    // whatever 
} 
+0

감사 포인터, 나는 루프 구조를 변경하여 orignal fib를 번호로 변경했습니다. – user1714873

관련 문제