包装奇怪的行为

时间:2012-07-12 14:09:44

标签: java casting wrapper

嗨,伙计们,我对这个简单的关于斐波那契的简单程序有点新鲜 并且该程序工作正常但是当我试图获得平均数时存在奇怪的行为

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;

我不知道为什么会这样做所以任何人都可以帮助我解释这个,那些人。

3 个答案:

答案 0 :(得分:3)

因为在第二种情况下

fibonacci.fibonaccifun(5)/5

转到2,因为fibonaccifun和5的结果都是整数,那么你转为浮动。 (如果你除2个整数,结果是一个int,而int显然不能有小数)

在第一种情况下

(float) ( fibonacci.fibonaccifun(5))

使fibonaccifun的结果为浮动,然后进行除法。

答案 1 :(得分:0)

你需要至少施放分子或分母

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

你正在划分2个整数。你永远不会得到任何东西,只有一个int铸造浮动(因此2.0)

修正:

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

答案 2 :(得分:0)

操作顺序:在数学和计算机编程中,操作顺序(有时称为操作符优先级)是用于明确说明应在给定数学表达式中首先执行哪些过程的规则。

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

圆括号 指数 乘法 师 加成 减法

这是一个完美的例子,说明如何切换括号可以将整个程序的逻辑推出门外。