我有一个用于学生姓名和成绩的数据库。数据存储在一个二维对象数组中。(这是必须的)每个学生都有自己的行,其中存储了5条数据,第一列包含该人的姓名,接下来的4列包含该人的4个不同的考试成绩。用户可以输入和添加数据。我能够很好地添加和显示数据,但我遇到的麻烦是计算平均值。
用户应该能够输入一个名字并在数据库中搜索,看看这个人是否存在。如果这个人在数据库中,我必须显示他的测试平均值。当我的studentAverage按钮被按下时,这一切都应该发生。我不知道如何搜索这个人,然后如何计算他们的平均值,有人能帮我吗?
我假设我必须使用对象类型的二维数组,因为字符串和双精度值都必须进入它。
public class StudentGrades extends javax.swing.JFrame {
final int STUDENTS = 14;
final int GRADES = 4;
Object[][] database = new Object[STUDENTS][GRADES + 1];
int studentCount = 0;
…
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
//declare variables
double grade1 = Double.parseDouble(test1.getText());
double grade2 = Double.parseDouble(test2.getText());
double grade3 = Double.parseDouble(test3.getText());
double grade4 = Double.parseDouble(test4.getText());
String name = firstInput.getText() + " " + lastInput.getText() + ":";
if (grade1 >= 0 & grade1 <= 100 & grade2 >= 0 & grade2 <= 100 & grade3 >= 0 & grade3 <= 100 & grade4 >= 0 & grade4 <= 100){
//add data
database[studentCount][0] = name;
database[studentCount][1] = grade1;
database[studentCount][2] = grade2;
database[studentCount][3] = grade3;
database[studentCount][4] = grade4;
//add to student count
studentCount = studentCount + 1;
//limit number of students
if (studentCount == 15){
addButton.setEnabled(false);
}
}
else {
errorLabel.setText("Please Enter Valid Data.");
}
}
使用Object[][]
作为数据库的要求确实妨碍了清晰的编程。它根本不是一个面向对象的方法。(你确定你不应该使用学生对象的一维数组吗?)
但是,给定您正在使用的二维Object
数组,您通过将给定的学生姓名与每个database[i][0]
列进行比较来搜索给定的学生姓名,首先将每个列转换为类型String
,然后循环遍历整个数组,直到找到匹配的名称。
要计算学生在database[i]
的平均成绩,只需将其他列加在一起,将每一列都转换为double
,然后除以分数数。
使用Object
类型来存储名称和数字,强制您将它们转换回原始类型,然后才能对它们进行任何操作(比较和算术)