【问题标题】:Java method repeats output incorrectly and too oftenJava 方法错误且过于频繁地重复输出
【发布时间】:2015-05-29 06:04:59
【问题描述】:

我只是想根据课程导师对 StackOverflow 的建议获得建议。对不起。

【问题讨论】:

  • 在print_average_grade 中,包装逻辑以计算平均值并打印在仅当s 的学生ID 匹配studentId 时才会执行的条件。

标签: java output static-methods repeat


【解决方案1】:
/**
 * 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 作为参数,这样您每次都会打印出正确学生的平均成绩。

【讨论】:

  • 谢谢你,这非常有启发性和优雅!
  • @JenniferChester 看看 MadProgrammer 的回答,他的方法绝对是要走的路。我的方法只是快速修复:)
  • @Gosu 当您找到匹配的学生时,您可以通过在其中添加break 来使其变得更好(但它可以完成工作;))
【解决方案2】:

你使用了两个循环,首先你使用

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

【讨论】:

    【解决方案3】:

    在打印平均方法中,您没有使用传递给它的学生 ID 来过滤列表。您每次都在迭代整个列表并打印所有平均值。但是在打印它时,传递给函数的学生 ID 正在被使用,所有学生的平均值将显示在同一个 ID 上。

    【讨论】:

      【解决方案4】:

      在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) 的学生。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2015-02-13
          • 1970-01-01
          • 2020-11-24
          • 1970-01-01
          • 2016-05-09
          • 2019-02-27
          • 1970-01-01
          • 1970-01-01
          • 2014-12-06
          相关资源
          最近更新 更多