java基础训练(3)

统计学生的成绩

  • 统计一组学生成绩的总分、平均分、最高分和最低分
  • 假如一组学生100个人,利用前面所学的知识,程序就需要声明10个变量score1,score2,…,score100,来记住每位的成绩,再计算平均分
  • 如果用平常的数学计算平均值得方法,会显得特别麻烦。所以我们使用一数组来保存多个成绩,通过数组的索引或下标来访问各个学生的成绩,再使用循环来处理。

1) 无范围的代码实现:

在这里插入图片描述
在这里插入图片描述

运行结果如下:

在这里插入图片描述

2)范围内的代码实现:

利用增强for语句循环来遍历数组

在这里插入图片描述

每个数组的索引(下标)都有一个范围,即[0,length - 1]。在访问数组元素时,索引不能超出这个范围,否则程序就会报错(ArrayIndexOutOfBoundsException,即数组角标越界异常),所以应删除“scores[10] = 78;”

在这里插入图片描述

在使用变量引用一个数组时,变量必须只想一个有效的数组对象,而该变量的值为null,意味着没有指向任何数组,这时该元素访问数组元素就会出现错误(NullPointerException,即空指针异常),所以该改成“ new double[10] ”

在这里插入图片描述

成绩在给定的范围内的正确代码如下:

public class Task07_1 {
    public static void main(String[] args) {
        //声明部分
        double[] scores = new double[10]; //双精度一维数组,10个元素,scores[0], scores[1],..., scores[9]
        double sum, average, max, min;
        Scanner sc = new Scanner(System.in);

        //输入部分
        for (int i = 0; i < scores.length;i++) {
            while (true) {
                System.out.print("scores[" + i + "] = ");
                scores[i] = sc.nextDouble();
                //判断成绩是否合法  -  [0,100]
                if (scores[i] >= 0 && scores[i] <= 100) {
                    break; //跳出while循环
                } else {
                    //提示用户输入成绩不合法
                    System.out.println("温馨提示:成绩必须要在[0,100]范围内!");
                }
            }
        }

        //处理部分
        sum = 0;
        for (int i = 0; i <scores.length; i++) {
            sum = sum + scores[i];
        }
        average = sum / scores.length;

        max = Double.MIN_VALUE;
        for (int i = 0; i < scores.length; i++) {
            if (scores[i] > max) {
                max = scores[i];
            }
        }
        min = Double.MAX_VALUE;
        for (int i = 0; i< scores.length; i++) {
            if (scores[i] < min) {
                min = scores[i];
            }
        }

        //输出部分
        System.out.println("sum = " + sum);
        System.out.println("average = " + average);
        System.out.println("max = " + max);
        System.out.println("min = " + min);
    }

}
  • 眼看百遍,不如手敲一遍哦!!!
  • 加油!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值