[英]How to extract numbers from Two-Dimensional Array of Objects in Java
我有一個二維對象數組,里面充滿了學生的姓名和年級。 每個學生都有自己的行,第一列包含學生姓名,然后接下來的四列包含考試成績。 我需要找到每個學生測試的平均值,但我不知道如何平均每一行的double值。 我還需要找到數據庫中所有測試的平均值。 有人可以告訴我該怎么做嗎?
public class StudentGrades extends javax.swing.JFrame {
Object[][] database = new Object[14][5];
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.");
}
合理的學生班級設計示例可能是這樣的(實現留為空白):
import java.util.List;
import java.util.ArrayList;
public class Student {
private String name;
private List<Double> grades;
public Student(String name) {
// TODO
}
public void addGrade(double grade) {
// TODO
}
public double average() {
// TODO
}
public String toString() {
return String.format(
"Student: %s\nAverage Grade: %f\n",
this.name,
this.average()
);
}
}
class TestStudent {
public static void main(String[] args) {
Student s = new Student("Hunter");
s.addGrade(100);
s.addGrade(90);
s.addGrade(0);
s.addGrade(85);
s.addGrade(75);
System.out.println(s);
}
}
像現在一樣使用代碼:
Object[][] database = new Object[14][5];
我們可以添加一些內容以使其對讀者更加友好
final int STUDENTS = 14;
final int GRADES = 4;
Object[][] database = new Object[STUDENTS][GRADES + 1];
為了能夠檢查平均值
public double getStudentAverageGrade(Object[] student)
{
for(int i = 0; i < GRADES; i++) // forEach grade
{
gradesSummatory += (double) student[i + 1]; // plus one is added since we ignore first value (which is students name)
}
return gradesSummatory/GRADES;
}
現在,要查看所有學生的平均值,這很容易,因為我們只需要實現先前創建的方法即可。
public double getAverageGrade()
{
double avgSummatory = 0;
for (int i = 0; i < STUDENTS; i++)
{
avgSummatory += getStudentAverageGrade(database[i]);
}
return avgSummatory/STUDENTS;
}
這么說我並不認為這是一個真正的最佳解決方案(您可以對所有元素求和並只進行一次除法),但是它是最具表達性的非面向對象的解決方案imo。 我寧願將這些元素/對象抽象到不同的類(例如Student)中,以便盡可能多地重用代碼。 但是對於這種情況,這可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.