JOptionPane 输入到数组的均值

JOptionPane inputs to array for mean

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

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();
}

编辑:

在我们正在讨论的主要方法中的 "original class" 中使用上述方法,您可以这样打印结果:

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

如果这不起作用,我想您的 "main-method" 是静态的。然后也将 getAverageGradeOfExamOne() 更改为静态,像这样

private static float getAverageGradeOfExamOne(List<Student> studentList) {
   float sum;

   for(Student student : studentList){
      sum += student.getExamOneGrade();
   }

   return sum/studentList.size();
}

这些方法声明之一应该会为您解决未解决的问题。