我正在尝试制作一本成绩簿,该簿为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();
}
这些方法声明之一应该为您解决松散的末端。