【发布时间】:2015-05-29 06:04:59
【问题描述】:
我只是想根据课程导师对 StackOverflow 的建议获得建议。对不起。
【问题讨论】:
-
在
print_average_grade中,包装逻辑以计算平均值并打印在仅当s的学生ID 匹配studentId时才会执行的条件。
标签: java output static-methods repeat
我只是想根据课程导师对 StackOverflow 的建议获得建议。对不起。
【问题讨论】:
print_average_grade 中,包装逻辑以计算平均值并打印在仅当s 的学生ID 匹配studentId 时才会执行的条件。
标签: java output static-methods repeat
/**
* prints a student’s average grade by student ID
* @param (String studentID)/ */
public static void print_average_grade(String studentID)
{
// Here, you have studentID passed into the function but you are not using it
for (Student s : studentList)
{
// Use the studentID here!
if(s.getStudentID().equals(studentID)) {
double total = s.getGrade1() + s.getGrade2() + s.getGrade3();
double average = total / 3;
System.out.println("StudentID# " + studentID + " " + average);
}
}
}
使用传入的studentID 作为参数,这样您每次都会打印出正确学生的平均成绩。
【讨论】:
break 来使其变得更好(但它可以完成工作;))
你使用了两个循环,首先你使用
for (Student s : studentList) {
print_average_grade(s.getStudentID());
}
调用print_average_grade,将studentID 传递给它,您会立即忽略它,然后再次循环遍历所有学生...
public static void print_average_grade(String studentID) {
for (Student s : studentList) {
double total = s.getGrade1() + s.getGrade2() + s.getGrade3();
double average = total / 3;
System.out.println("StudentID# " + studentID + " " + average);
}
}
相反,将您的 print_average_grade 方法更改为接受 Student 并简单地计算所述学生的平均值
public static void print_average_grade(Student s) {
double total = s.getGrade1() + s.getGrade2() + s.getGrade3();
double average = total / 3;
System.out.println("StudentID# " + studentID + " " + average);
}
然后在你的主循环中,将你想要的Student 传递给它...
for (Student s : studentList) {
print_average_grade(s);
}
如果您“真的”需要通过id 执行此操作,那么我将编写一个方法,该方法采用int 值(id)并执行回传Student 对象的查找,因为您似乎想要这样做几次...(请注意Map 会更有用)
public Student getStudentById(int id) {
Student match = null;
for (Student s : studentList) {
if (s.getStudentID() == id) {
match = s;
break;
}
}
return match;
}
【讨论】:
在打印平均方法中,您没有使用传递给它的学生 ID 来过滤列表。您每次都在迭代整个列表并打印所有平均值。但是在打印它时,传递给函数的学生 ID 正在被使用,所有学生的平均值将显示在同一个 ID 上。
【讨论】:
在print_average_grade 中,包装逻辑以计算平均值并打印在仅当s 的学生ID 匹配studentId 时才会执行的条件。
public static void print_average_grade(String studentID) {
for (Student s : studentList) {
if (!s.getStudentID().equals(studentID)) continue;
double total = s.getGrade1() + s.getGrade2() + s.getGrade3();
double average = total / 3;
System.out.println("StudentID# " + studentID + " " + average);
}
}
或者,您可以创建一个方法来“查找”具有该 ID 的学生,然后仅将该学生传递给 print_average_grade。或者,您可以将学生存储在 Map<String, Student> 中,其中键是学生 ID,因此您可以找到具有 map.get(studentID) 的学生。
【讨论】:
将 print_average_grade(String studentID) 更改为 print_average_grade(Student student) 将解决如下问题:
for (Student s : studentList)
print_average_grade(s);
public static void print_average_grade(Student student) {
double total = student.getGrade1() + student.getGrade2()
+ student.getGrade3();
double average = total / 3;
System.out.println("StudentID# " + student.getStudentID() + " "
+ average);
}
【讨论】: