【问题标题】:Wrapper strange behavior包装器奇怪的行为
【发布时间】:2012-07-12 14:09:44
【问题描述】:

大家好,我对这门语言有点陌生,我制作了这个关于斐波那契的简单程序 并且程序运行良好,但是当我尝试获取平均数时出现奇怪的行为

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;

我不知道为什么会这样,所以谁能帮我解释一下,谢谢各位。

【问题讨论】:

    标签: java casting wrapper


    【解决方案1】:

    因为在第二种情况下

    fibonacci.fibonaccifun(5)/5

    转到 2,因为 fibonaccifun 和 5 的结果都是整数,THEN 你转换为浮点数。 (如果把2个int相除,结果就是一个int,而int显然不能有小数)

    第一种情况

    (float) ( fibonacci.fibonaccifun(5))

    使fibonaccifun 的结果为浮点数,然后你进行除法。

    【讨论】:

      【解决方案2】:

      您至少需要转换分子或分母

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

      您正在划分 2 个整数。除了转换为 float 的 int 之外,您永远不会得到任何东西(因此是 2.0)

      修复:

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

      【讨论】:

        【解决方案3】:

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

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

        括号 指数 乘法 分配 添加 减法

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

        【讨论】:

          猜你喜欢
          • 2020-07-18
          • 1970-01-01
          • 1970-01-01
          • 2021-07-11
          • 2021-12-01
          • 2017-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多