JOptionPane输入到数组的平均值



我正在尝试制作一本成绩簿,该簿为X名学生输入了五个作业,并为每个学生提出了最终成绩。程序根据输入的学生数量成功循环,并正确编译。但是,我需要根据整个班级得出每个作业的平均值。我试图用数组来实现这一点,但我拼命地卡住了。

int numStudents = Integer.parseInt(JOptionPane.showInputDialog(null,"Enter number of students: "));
String[] examOneGrade = new String[numStudents];
String[] examTwoGrade = new String[numStudents];
String[] examFinalGrade = new String[numStudents];
String[] projectGrade = new String[numStudents];
String[] homeworkGrade = new String[numStudents];
// loops depending on number of students in the class
for (int i = 0; i < numStudents; i++) {
    String name = JOptionPane.showInputDialog(null, "Enter Student Name: ");
    JOptionPane.showMessageDialog(null, "Enter Grades for " + name,
                " ", JOptionPane.PLAIN_MESSAGE);
    examOneGrade[i] = JOptionPane.showInputDialog(null, "Enter Exam 1 Grade: ");
    examTwoGrade[i] = JOptionPane.showInputDialog(null, "Enter Exam 2 Grade: ");
    examFinalGrade[i] = JOptionPane.showInputDialog(null, "Enter Final Exam Grade: ");
    projectGrade[i] = JOptionPane.showInputDialog(null, "Enter Project Grade: ");
    homeworkGrade[i] = JOptionPane.showInputDialog(null, "Enter Homework Grade: ");
    // converts strings to floats
    float exam1 = Float.parseFloat(examOneGrade[i]);
    float exam2 = Float.parseFloat(examTwoGrade[i]);
    float finalExam = Float.parseFloat(examFinalGrade[i]);
    float project = Float.parseFloat(projectGrade[i]);
    float homework = Float.parseFloat(homeworkGrade[i]);
    // weights
    float number1 = exam1 * .10f;
    float number2 = exam2 * .10f;
    float number3 = finalExam * .30f;
    float number4 = project * .30f;
    float number5 = homework * .20f;
    // calculates student final grade
    float grade = number1 + number2 + number3 + number4 + number5;
    JOptionPane.showMessageDialog(null, "Final Grade: " + grade,
                " " + name, JOptionPane.PLAIN_MESSAGE);
    }

不是要求得到答案,我只是迫切想知道我是否走在正确的道路上,以及我应该在哪里寻找。这个确切的话题似乎不存在。

我对低档方法的尝试:

public int getMinimum(List<Student> studentList) {
float lowGrade = getExamOneGrade[0];
for(Student student : studentList) {
if(student.getExamOneGrade() < lowGrade) {
lowGrade = getExamOneGrade;
  }
}
return lowGrade;
}

嗯,基本上你的方法没有错。但是你应该更进一步,把关于单个学生的所有信息和计算放在一个对象中。例如

请注意,这只是一个简短的示例。您必须自己完成它。

public class Student {
    private String name;
    private float examOneGrade;
    private float examTwoGrade;
    private float examFinalGrade;
    private float projectGrade;
    private float homeworkGrade;
    // getters and setters
    public String getName(){
       return name;
    }
    public void setName(String name){
       this.name = name;
    }
    public float getExamOneGrade(){
       return examOneGrade;
    }
    public void setExamOneGrade(float examOneGrade) {
       this.examOneGrade = examOneGrade;
    }
    // and so on ...
    // weight computation goes here
    public float getExamOneWeight() {
       return examOneGrade * .10f;
    }
    public float getExamTwoWeight() {
       return examOneGrade * .10f;
    }
    // ...
    public float getFinalGrade {
        return getExamOneWeight() +
               getExamTwoWeight() +
               // ...
               getHomeworkWeight();
    }
}

然后在您的代码中

int numStudents = Integer.parseInt(JOptionPane.showInputDialog(null,
        "Enter number of students: "));
List<Student> studentList = new ArrayList<Student>();
// loops depending on number of students in the class
for (int i = 0; i < numStudents; i++) {
    Student student = new Student();
    student.setName(JOptionPane.showInputDialog(null, "Enter Student Name: "));
    JOptionPane.showMessageDialog(null, "Enter Grades for " + student.getName(),
            " ", JOptionPane.PLAIN_MESSAGE);
    student.setExamOneGrade(Float.parseFloat(JOptionPane.showInputDialog(null, "Enter Exam 1 Grade: ")));
    student.setExamTwoGrade(Float.parseFloat(JOptionPane.showInputDialog(null, "Enter Exam 2 Grade: ")));
    // and so on ..
    // now add the student to the ArrayList
    studentList.add(student);
    JOptionPane.showMessageDialog(null, "Final Grade: " + student.getFinalGrade(),
            " " + student.getName(), JOptionPane.PLAIN_MESSAGE);
}

编辑二:

// show the averages here
JOptionPane.showMessageDialog(null, "Avg Grade Of Exam One: " + getAverageGradeOfExamOne(studentList), JOptionPane.PLAIN_MESSAGE);
JOptionPane.showMessageDialog(null, "Avg Grade Of Exam Two: " + getAverageGradeOfExamTwo(studentList), JOptionPane.PLAIN_MESSAGE);
// ...

使用此学生列表,您现在可以计算所需的任何内容,并且结构良好且易于使用。

例如

private float getAverageGradeOfExamOne(List<Student> studentList) {
   float sum;
   for(Student student : studentList){
      sum += student.getExamOneGrade();
   }
   return sum/studentList.size();
}

编辑:

在我们正在讨论的主方法中的"原始类"中使用上面的此方法,您可以通过以下方式打印结果:

JOptionPane.showMessageDialog(null, "Avg Grade Of Exam One: " + getAverageGradeOfExamOne(studentList), JOptionPane.PLAIN_MESSAGE);

如果这不起作用,我想您的"主方法"是静态方法。然后将getAverageGradeOfExamOne((也更改为静态,如下所示

private static float getAverageGradeOfExamOne(List<Student> studentList) {
   float sum;
   for(Student student : studentList){
      sum += student.getExamOneGrade();
   }
   return sum/studentList.size();
}

这些方法声明之一应该为您解决松散的末端。

最新更新