首页 > 其他分享 >Day44--练习--操作题(2)

Day44--练习--操作题(2)

时间:2024-12-10 15:57:39浏览次数:3  
标签:成绩 -- 操作题 学生 数组 printf Day44 ArrayList 输入

Day44--练习--操作题(2)

当然可以,这里有一道稍微复杂一点的Java练习题,它将涉及到数组和循环的使用:

题目:学生成绩管理系统

要求:
编写一个简单的学生成绩管理系统,该系统能够:

  1. 输入学生的姓名和对应的成绩。
  2. 显示所有学生的姓名和成绩。
  3. 计算并显示所有学生的平均成绩。
  4. 找出并显示成绩最高的学生姓名和成绩。

输入:

  • 学生数量(int类型)
  • 每个学生的姓名(String类型)
  • 每个学生的成绩(double类型)

输出:

  • 所有学生的姓名和成绩列表
  • 所有学生的平均成绩
  • 成绩最高的学生的姓名和成绩

示例:

请输入学生数量: 3
请输入第1个学生的姓名: 张三
请输入张三的成绩: 85.5
请输入第2个学生的姓名: 李四
请输入李四的成绩: 90.0
请输入第3个学生的姓名: 王五
请输入王五的成绩: 78.5

所有学生的成绩如下:
张三: 85.5
李四: 90.0
王五: 78.5

所有学生的平均成绩是: 84.67

成绩最高的学生是: 李四, 成绩是: 90.0

提示:

  • 使用数组或集合来存储学生的姓名和成绩。
  • 使用循环来处理多个学生的输入和计算。
  • 可以使用ArrayList来动态存储学生信息,如果使用数组则需要注意数组的大小固定。

这个练习题将帮助你巩固数组、循环和条件判断的使用,同时也是对你之前所学基础语法的一个综合运用。

答案:

以下是实现上述学生成绩管理系统的Java代码示例:

```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Student {
    String name;
    double score;

    Student(String name, double score) {
        this.name = name;
        this.score = score;
    }
}

public class StudentGradeManager {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Student> students = new ArrayList<>();

        System.out.print("请输入学生数量: ");
        int numberOfStudents = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符

        for (int i = 1; i <= numberOfStudents; i++) {
            System.out.print("请输入第" + i + "个学生的姓名: ");
            String name = scanner.nextLine();
            System.out.print("请输入" + name + "的成绩: ");
            double score = scanner.nextDouble();
            scanner.nextLine(); // 消耗换行符

            students.add(new Student(name, score));
        }

        // 显示所有学生的成绩
        System.out.println("
所有学生的成绩如下:");
        double totalScore = 0;
        for (Student student : students) {
            System.out.println(student.name + ": " + student.score);
            totalScore += student.score;
        }

        // 计算平均成绩
        double averageScore = totalScore / numberOfStudents;
        System.out.printf("
所有学生的平均成绩是: %.2f
", averageScore);

        // 找出成绩最高的学生
        Student topStudent = students.get(0);
        for (Student student : students) {
            if (student.score > topStudent.score) {
                topStudent = student;
            }
        }

        System.out.println("
成绩最高的学生是: " + topStudent.name + ", 成绩是: " + topStudent.score);

        scanner.close();
    }
}
```

### 代码解释:
1. **Student类**:定义了一个`Student`类来存储学生的姓名和成绩。
2. **ArrayList**:使用`ArrayList`来动态存储学生对象。
3. **输入处理**:使用`Scanner`类来获取用户输入,并处理输入的换行符。
4. **显示成绩**:使用`for-each`循环遍历`ArrayList`并显示每个学生的姓名和成绩。
5. **计算平均成绩**:通过累加所有学生的成绩并除以学生数量来计算平均成绩。
6. **找出最高成绩**:遍历`ArrayList`,找出成绩最高的学生。

这个代码示例涵盖了Java的基础语法和面向对象编程的概念,包括类、对象、数组列表、循环和条件判断。希望这个示例对你有所帮助!

详细解析:

为什么要使用ArrayList来动态存储学生对象?
使用ArrayList来动态存储学生对象有几个原因:

1. 动态大小

  • 数组大小固定:如果你使用数组来存储学生对象,你需要预先知道学生的数量,并且数组的大小是固定的。如果学生数量变化,你需要手动调整数组的大小,这可能会导致代码复杂且容易出错。
  • ArrayList动态调整ArrayList是Java集合框架的一部分,它可以动态地调整大小。当你添加或删除元素时,ArrayList会自动处理内存分配和调整,使得代码更简洁和灵活。

2. 简化代码

  • 添加和删除元素:使用ArrayList,你可以很容易地添加和删除学生对象,而不需要手动管理数组索引或处理数组复制。
  • 遍历方便ArrayList提供了方便的方法来遍历元素,比如使用for-each循环,这使得代码更简洁和易读。

3. 类型安全

  • 泛型支持ArrayList是泛型类,可以在创建时指定存储的元素类型(例如ArrayList<Student>),这提供了类型安全,避免了类型转换错误。

4. 内置方法

  • 丰富的内置方法ArrayList提供了许多有用的方法,比如addremovegetsize等,这些方法使得操作集合变得非常方便。

示例对比

使用数组

Student[] students = new Student[numberOfStudents]; // 需要预先知道学生数量
for (int i = 0; i < numberOfStudents; i++) {
    students[i] = new Student(name, score);
}

使用ArrayList

ArrayList<Student> students = new ArrayList<>();
students.add(new Student(name, score)); // 动态添加元素

总结

使用ArrayList来存储学生对象使得代码更简洁、灵活和易于维护。它提供了动态调整大小、类型安全和丰富的内置方法,非常适合用于存储和管理一组对象。

printf在上面啥意思?

printf 是一个在多种编程语言中存在的函数,用于格式化输出。在 Java 中,printfPrintStream 类的一个方法,主要用于按照指定的格式输出字符串。

printf 方法的基本语法如下:

System.out.printf(format, args);
  • format 是一个包含格式说明符的字符串,用于指定输出的格式。
  • args 是一个或多个要输出的参数,它们的类型和顺序必须与格式说明符匹配。

格式说明符

格式说明符以 % 开头,后面跟着一个或多个字符,用于指定输出的格式。常见的格式说明符包括:

  • %s:字符串
  • %d:十进制整数
  • %f:浮点数
  • %c:字符

示例

以下是一些使用 printf 方法的示例:

System.out.printf("Hello, %s!", "World"); // 输出: Hello, World!
System.out.printf("The answer is %d.", 42); // 输出: The answer is 42.
System.out.printf("Pi is approximately %.2f.", 3.14159); // 输出: Pi is approximately 3.14.

在你的代码中的应用

在你的代码中,printf 方法用于格式化输出平均成绩:

System.out.printf("
所有学生的平均成绩是: %.2f
", averageScore);

这里的 %.2f 是一个格式说明符,表示输出一个浮点数,并保留两位小数。averageScore 是要输出的参数。

希望这能帮助你理解 printf 方法在 Java 中的用法!

标签:成绩,--,操作题,学生,数组,printf,Day44,ArrayList,输入
From: https://www.cnblogs.com/xiaokunzhong/p/18597491

相关文章

  • 数据库的基本操作
    title:数据库的基本操作date:2024/12/9updated:2024/12/9author:cmdragonexcerpt:数据库的基本操作是使用数据库管理系统(DBMS)执行数据存储和检索的核心行为。通过对数据库的创建、删除、查询、更新和删除等基本操作,用户能有效地管理和利用数据资源。本节将详细......
  • Kong集群hybrid混合-对外统一暴露关闭连接数据库权限cp节点
    1.x版本kong的集群其实是通过运行多个实例,访问同一个数据库来实现的。具体表现为定时轮询数据库,获取最新的Services,Routes,Consumers,Plugins等信息,并缓存它们,直到下一次请求数据库时再更新数据如果某个节点通过adminapi对数据库中保存的代理配置进行更改,这个节点本身会立即生效......
  • 抗混叠滤波器到底是个啥???
    基本概念抗混叠滤波器本质上是一种低通滤波器,其主要作用是在对模拟信号进行离散化采集前,滤除高于二分之一采样频率的频率成份,从而在输出电平中把混叠频率分量降低到微不足道的程度。奈奎斯特采样定律规定,在对模拟信号进行离散化时,采样频率fs至少应2倍于被分析的信号......
  • url_for函数、视图函数、endpoint参数
    在Flask中,url_for函数、路由装饰器中的endpoint参数以及视图函数名称之间的关系是理解FlaskURL路由机制的关键。先看示例代码:HTML文件代码:<li><ahref="{{url_for('val1',title='index首页')}}">首页1</a></li>python文件代码:@app.route('/',endpoin......
  • 遥感与气象数据集的查找与常见数据格式的解释
    数据集的获取遥感数据和气象数据是各种环境和气候研究课题中常用的数据类型,通常会从不同的官方网站和数据平台获取。以下是一些遥感和气象数据课题组常用的数据来源和相关的卫星产品:1.气象数据:ERA5(气象数据)来源:CopernicusClimateChangeService(C3S)类型:ERA5......
  • JeecgBoot 与分布式事务 Seata v1.7.0 集成实战
    准备环境一、创建四个数据库,如下jeecg_order(订单数据库)jeecg_account(账户数据库)jeecg_product(商品数据库)seata(seata数据库)以上数据库脚本已存放至jeecg-cloud-test-seata示例中,文件位置如下图所示二、准备调试代码1.示例代码提供如下jeecg-cloud-test-seata-order......
  • k8s 实战 4----副本集
    副本集是什么?我们在前文中讲过什么是pod,简单来说pod就是k8s直接操作的基本单位。不了解的同学可以参考前文:k8s实战1----初识(https://www.cnblogs.com/jilodream/p/18245222)k8s实战2----pod基础(https://www.cnblogs.com/jilodream/p/18284282)k8s实战3----标签(htt......
  • 在RK3399上搭建一套监控系统
    此篇文章在2022年10月9日被记录在linux主机上搭建一套远程监控系统矿板有风险,入坑需谨慎最近在同事的推荐下在咸鱼入手了一套RK3399的开发板,卖家说是广告机的拆机设备,实际上嘛懂得都懂,这是不知道哪个币又崩盘了但是该说不说,这个板子本身就是开发板,配置2+16,并且配套资料......
  • 入库出库查询软件——qt
    miniMes系统操作说明一:功能说明主界面有扫描--查询两个界面,扫描界面如下1:默认开启自动入库出库功能2:右上角限制位数可根据需求设定二维码字符串的位数,设置完成后点击设定,弹窗设定成功即可3:运行逻辑如下,鼠标点击二维码输入框,扫描二维码,未入库的产品会执行《入库操作》4:两秒......
  • LaTeX参考文献格式处理
    通过latexmakebst命令,通过指定选项可以手动生成一个bst文件。如果中间选项不对,可以对中间生成的dbj文件进行修改,然后重新运行latexXX.dbj命令重新生成bst文件。参考文献:通过修改bst文件手动设置LaTeX参考文献格式https://liwt31.github.io/2021/03/02/bst/bibtexvs.bibe......