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

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在上面啥意思?

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

printf 方法的基本语法如下:

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

格式说明符

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

  • %s:字符串
  • %d:十进制整数 decimal 十进制的
  • %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 中的用法!

posted @ 2024-12-10 15:43  1hahahahahahahaha  阅读(19)  评论(0)    收藏  举报