0

こんにちは皆さん、フィボナッチに関するこの簡単なプログラムを作成した言語にちょっと慣れていません。プログラムは正常に動作しますが、平均数を取得しようとすると奇妙な動作が発生します

public class fibonacci {

/**
 * @param args
 */
public static int fibonaccifun(int number)

{
    int firstvar=1;
    int secondvar=0,total=0,sum=0;
    for(int i=0;i<number;i++)
    {
        total =firstvar+secondvar;
        System.out.println(total);
        firstvar=secondvar;
        secondvar=total;
        sum+=total;

    }

return sum;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub



     float aver= (float) ( fibonacci.fibonaccifun(5)/5);
    System.out.println(aver);

...................................................

私が試したとき

float aver= (float) ( fibonacci.fibonaccifun(5))/5;結果は正しい値である2.4ですが、これを行うと

float aver= ((float) fibonacci.fibonaccifun(5)/5); 平均=2.0;

なぜこれを行うのかわからないので、誰かがこれを説明するのを手伝ってくれます、thx みんな。

4

3 に答える 3

3

なぜなら、2番目のケースでは

fibonacci.fibonaccifun(5)/5

と 5の両方の結果fibonaccifunが int であるため、2 になり、フロートにキャストします。(2 つの int を除算すると、結果は int になり、int は明らかに小数を持つことはできません)

最初のケースでは

(float) ( fibonacci.fibonaccifun(5))

fibonaccifunフロートの結果を作成し、除算を行います。

于 2012-07-12T14:12:44.477 に答える
0

少なくとも分子または分母をキャストする必要があります

((float) fibonacci.fibonaccifun(5)/5)

2 int を分割しています。float にキャストされた int 以外は何も得られません (したがって 2.0)

修理:

(((float) fibonacci.fibonaccifun(5))/5)
于 2012-07-12T14:15:56.760 に答える
0

演算の順序: 数学およびコンピューター プログラミングでは、演算の順序 (演算子の優先順位と呼ばれることもあります) は、特定の数式で最初に実行する手順を明確に明確にするために使用される規則です。

http://en.wikipedia.org/wiki/Order_of_operations

括弧 指数 乗算 除算 加算 減算

これは、括弧を切り替えるだけで、プログラム全体のロジックを戸外に放り出すことができるという完璧な例です。

于 2012-07-12T14:18:58.240 に答える