JAVA编程中遇到的自动转换问题

package step3;

 

import java.util.Scanner;

 

public class HelloWorld {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        

        int[] scores = new int[sc.nextInt()];

        

        //循环给数组赋值

        for(int i = 0 ; i< scores.length;i++){

            scores[i] = sc.nextInt();

        }

        /********** Begin **********/

        //在这里计算数组scores的平均值和最大值

        int max=scores[0];

        for(int j=1;j<scores.length;j++)

        {

                if(scores[j]>max)

                {

                    max=scores[j];

                }

        }

    

        int sum=0;

        for(int j=0;j<scores.length;j++)

        {

               sum+=scores[j];

        }

        float ave=sum/scores.length

        System.out.println("平均值:"+ ave );

        System.out.println("最大值:"+max  );

        /********** End **********/

    }

}

测试输入:

5 1 151 12 22 100

————预期输出————

平均值:57.2 最大值:151

———— 实际输出 ————

平均值:57.0 最大值:151

     

错误原因 : sum/scores.length两个变量都为整形 则得到的值为整形 即使最后AVE以float类型输出得到的值也是57.0而不是57.2

改正方案:int sum=0; 改为 float sum=0;

 

总结:

表达式的数据类型自动提升

  • 所有的byte型、short型和char的值将被提升到int型。

  • 如果一个操作数是long型,且无float与double型参与计算 ,计算结果就是long型;

  • 如果一个操作数是float型,无double型参与计算,计算结果就是float型;

  • 如果一个操作数是double型,计算结果就是double型。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值