【问题标题】:Find higest value among objects created in a class在类中创建的对象中查找最高值
【发布时间】:2015-05-25 15:55:07
【问题描述】:

谁能解释我如何从我在主类中创建的所有对象中获得最高价值?

在本例中,我在主班中创建了 2 个学生对象,并添加了一些课程名称和成绩。

我制作了 2 个静态数组来存储来自不同对象的信息,但它不返回最高等级的对象。

如何存储创建的学生对象的最高成绩?

public class CMate {
    private static String[] studentName = new String[2];
    private static int[][] gradeAssigned = new int[2][3];
    private static int higGrade = 0;
    private String name;
    private int cpr;
    private String[] courseName = new String[3];
    private int[] grade = new int[3];
    private int numberOfCourse;
    private int numberOfGrades;
    private static int counter = 0;

    CMate(String name, int cpr) {
        // building constructor
        System.out.println("Creating object nr " + counter);
        this.name = name;
        this.cpr = cpr;
        // insert name into array   
        studentName[counter] = name;
        for (int i = 0; i < numberOfCourse; i++) {
            gradeAssigned[counter][i] = grade[i];
        }
        counter++;
    }

    public void addcourseName(String nameOfCourse) {
        courseName[numberOfCourse] = nameOfCourse;
        numberOfCourse++;
    }

    public void addGrade(int gradeNr) {
        grade[numberOfGrades] = gradeNr;
        numberOfGrades++;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCpr() {
        return cpr;
    }

    public void setCpr(int cpr) {
        this.cpr = cpr;
    }

    public String[] getCourseName() {
        return courseName;
    }

    public void setCourseName(String[] courseName) {
        this.courseName = courseName;
    }

    public int[] getGrade() {
        return grade;
    }

    public void setGrade(int[] grade) {
        this.grade = grade;
    }

    public String toString() {
        String studentInfo = "";
        System.out.println("------------------------------\n student " + name + " CPR " + cpr);

        for (int i = 0; i < numberOfCourse; i++) {
            studentInfo += " Course " + courseName[i] + "Grade  " + grade[i];
        }
        return studentInfo;
    }

    public double averageGrade() {
        double total = 0;

        for (int i = 0; i < numberOfGrades; i++) {
            total += grade[i];
        }
        return (total / numberOfGrades);
    }

    public void higestGrade() {
        for (int i = 0; i < studentName.length; i++) {
            if (grade[i] > higGrade) {
                higGrade = grade[i];
            }
        }
    }

    public void higestObjectGrade() {
        System.out.println(higGrade);
    }
}

【问题讨论】:

  • 但我想找到所有创建的对象(学生)中分配的最高成绩;
  • 排序后数组的值按升序/降序排列。它将是第 0 个或第 n 个元素
  • 或执行以下操作,循环数组 gradeAssigned .. 有一个变量 maxFound=gradeAssigned[0][0] (第一个元素)...并在循环中检查是否任何大于 maxFound 然后更新它

标签: java arrays class


【解决方案1】:

我不完全理解你的代码,但这里有一个简化版本,包括一个 static 字段来保留所有学生,以及一个 static 函数来返回最高分:

class Student {

  public final static List<Student> allCreatedStudents = new ArrayList<Student>();

  String name;
  int[] grades = new int[3];

  public Student(String name){
    this.name = name;
    allCreatedStudents.add(this); // Every time a student is created, he is recorded in the static list
  }

  public void setGrade(int grade, int index){
    this.grades[index] = grade;
  }

  public static int getHighestGrade(){
    int highestGrade = 0;
    for(Student s : allCreatedStudents){  // Loop through all students
      for(int i=0; i<s.grades.length; i++){  // Loop through all grades
        if(s.grades[i]>highestGrade)
          highestGrade = s.grades[i];
      }
    }
    return highestGrade;
  }

}

【讨论】:

  • 从@Rangerguy 的代码中可以假设他不知道 java.util.Collection 是否存在。所以我觉得坚持数组对他来说会更容易理解
猜你喜欢
  • 2017-04-08
  • 2021-12-06
  • 2022-01-12
  • 2022-01-18
  • 2018-07-09
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多