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型。