0

フィボナッチ数列を表示できるプログラムを書こうとしています。ただし、入力した数値は0を出力します。変数のスコープに関係しているか、戻り値に問題があると思われます。誰かが私のコードを見て、それが本当にそれらの問題であるかどうかを判断できますか? 私はJavaが初めてなので、基本的なことさえ難しいです。

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

いくつかの修正を行い、エラーを 1 つ減らしました。

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

ちょっとした質問が来ました。あるメソッドが変数に対して別のメソッドを呼び出すことはできますか? 変数は中括弧の中にあります。私のコードにあるもののようなものです。私のエラーのほとんどはこれに似ていたようです。

4

1 に答える 1

5

スコープとは関係ありません。このコードを見てください:

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

fib変数を「実行する反復回数」と「現在の結果」の両方として使用しています。これらは 2 つの別個の概念であり、別個の変数に格納する必要があります。

特に、最初の反復でfibは、に設定され0i1 にインクリメントされます... そのため、ループは終了し、0 が返されます。

また、パラメーターの型を に変更し、フィボナッチ数の変数intを使用longすることをお勧めします (サポートする範囲によって異なります)。BigIntegerこの問題には整数以外の値を必要とする部分はないのでdouble、まったく使用しないでください。

最後に、forループの代わりにループを使用することをwhileお勧めします。特定の回数の反復を実行したい場合、Java でそれを記述する慣用的な方法は次のとおりです。

for (int i = 0; i < count; i++) {
    // whatever
}
于 2012-11-20T13:48:16.123 に答える