【发布时间】:2021-08-24 18:17:09
【问题描述】:
我正在尝试解决一个练习题:
假设以下 Student 和 GradeBook 类的基本骨架:
public class GradeBook { private String courseName; private Student[] students; // ... other methods .... } public class Student{ private int id; private String name; int marks[]; // marks in different tests }封装字段并定义所需的构造函数。然后,制作一个 GradeBook 对象并根据用户输入完全初始化它。从用户输入中获取学生人数。由于每个学生的测试数量可能不同,因此您的程序应在每个测试中获取测试数量和分数,也形成用户输入。您还可以生成和使用随机数来快速初始化整个数据,而不是从用户那里获取,而是选择合适的范围,例如最高分 100 分,最多学生 50 分,每个学生可以参加的最大考试次数应小于或等于 10。完全初始化 GradeBook 对象后,打印以下信息: 哪个学生给了最大的测试次数,打印学生证 谁得到最高平均分,打印学生证。 班级平均分 班上每个学生的平均分 每个学生的最低分数,打印分数和学生证 每个学生的最高分数,打印分数和学生证 学生的平均分、最低分和最高分(从用户那里获取学生) 有些方法应该写在 Student 类中,有些方法应该写在 GradeBook 类中,根据它的作用决定方法的最佳位置。以不同的方法执行所有列出的任务,并从 GradeBook 测试类的 main 方法中调用这些方法。
我的代码(不完整):
主类
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Random random = new Random();
System.out.println("Enter No. of Students: ");
Student[] students = new Student[sc.nextInt()];
for (int i = 0; i < students.length; i++) {
System.out.printf("----- (STUDENT - %d) -----\n", i+1);
System.out.println("No. of Tests given: ");
int[] marks = new int[sc.nextInt()];
System.out.println("Enter ID and Name: ");
students[i] = new Student(sc.nextInt(), sc.nextLine(), sc.nextLine(), marks);
}
}
我无法理解如何制作学生数组,其中包含 id、姓名和标记数组作为其元素。
【问题讨论】:
-
听起来你缺少a fundamental understanding of what Objects are。你不会有一个具有不同值类型的数组。您将拥有一个
Student对象数组,您将 instantiate 添加到数组中。 -
@user15793316 我不建议告诉新程序员这件事。这会给他们带来坏习惯和/或让他们感到困惑,因为他们需要执行强制转换才能利用他们放入这样一个数组中的任何东西。
-
@user15793316 很难说。当然,至少与在他们不了解为什么不好的情况下将坏主意放在脑海中一样糟糕。两者都不理想。我想我倾向于让人们发现不好的想法,希望他们当时已经学到了足够的知识来认识到它,而不是在他们没有足够的经验来理解为什么它是坏主意,因此很可能会忽略警告,因为它完成了他们想做的事情。
标签: java arrays oop constructor