Как заполнить массив объектов и найти минимальное значение для массива объектов - PullRequest
0 голосов
/ 30 ноября 2018

РЕДАКТИРОВАТЬ РЕШЕНИЕ

Исходя из кода forpas, я немного перемещаюсь, и теперь минимальное значение отображается, как и ожидалось.Ребята, спасибо за вашу помощь.

public static StudentGrade findMinIndex(StudentGrade[] studentGrades) 
{       
    StudentGrade studentGradeMin = studentGrades[0];

    for(int i=0; i < studentGrades.length; i++) 
    {
        if(studentGradeMin.getGrade()[0] > studentGrades[i].getGrade()[i]) 
        {
            studentGradeMin.getGrade()[0] = studentGrades[i].getGrade()[i];

        }                  
    }

    System.out.println(studentGradeMin.getGrade()[0]);

    return studentGradeMin;

}

РЕДАКТИРОВАТЬ:

Теперь, когда я могу распечатать число, у меня возникла проблема с поиском минимального значения.Я продолжаю получать сообщение об ошибке: «Оператор> не определен для типа (ов) аргумента StudentGrade, StudentGrade»

Мне нужно найти минимальное значение для моего массива объектов, но я не могу правильно распечатать объект.Результат не будет отображаться как целые числа.Может кто-нибудь помочь мне, пожалуйста?

Это мой текстовый файл

6 Джон 97,5 Джим 99 Кэти 34 Стив 86,5 Стейси 43 Вера 88

Это мои методы

// Это класс конструктора

public class StudentGrade
{   

      private String[] names;
      private double[] grades; // instance variable


      // constructor initializes grades with parameter grades               
      public StudentGrade(double[] grades, String[] names) 
      {                                                                 
         this.grades = grades; 
         this.names = names;
      }                                                                
      // method to set the grades
      public void setGrade(double[] grades)
      {
         this.grades = grades;
      }

      // method to retrieve the grades
      public double[] getGrade()
      {
         return grades;
      }


      //Set name
      public void setName(String[] names)
      {
         this.names = names;
      }

      // method to retrieve the names
      public String[] getName()
      {
         return names;
      }
}

// Это мой основной класс

   public static StudentGrade[] initialize(String inputFileName)   throws FileNotFoundException 
    {           
    Scanner scan = new Scanner(new FileInputStream("grade.txt"));   

    int size = scan.nextInt();
    String[] names = new String[size];
    double[] grades = new double[size];
    int index = 0;
    String[] col = null;

    while(scan.hasNextLine())           
    {
        names[index] = scan.next();
        grades[index] = scan.nextDouble();
        index++;

    }

    StudentGrade[] studentGrades = new StudentGrade[grades.lenght];
    for(int i=0; i< studentGrades; i++)
    {
       studentGrades[i] = new StudentGrade(grades, names);

    }

    for(int i=0; i< grades.length; i++)
    {
        System.out.println(studentGrades[i].getGrade());
    }

    scan.close();
    return studentGrades;
  }

 //This is to find minimum value

public static StudentGrade findMinIndex(StudentGrade[] studentGrades) 
{

    StudentGrade studentGradeMax = studentGrades[0];

     for(int i=1;i<studentGrades.length;i++)
     {
        if(studentGrades[i] > studentGradeMax) ==> Error "The operator > is undefined for the argument type(s) StudentGrade, StudentGrade"
        {
            studentGradeMax = studentGrades[i];
        }
      }
      return studentGradeMax;


}

The code return these values instead of real number
[D@3d4eac69
[D@3d4eac69
[D@3d4eac69
[D@3d4eac69

[D @ 3d4eac69 [D @ 3d4eac69

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Самый простой способ - переопределить метод String toString () из класса Object, поскольку это метод по умолчанию, используемый при печати объекта

Таким образом, в вашем методе StudentGrade вы бы добавили

@Override
public String toString() {
     return //your fields
}

Проблема здесь в том, что ваши поля-члены в StudentGrade представляют собой массивы, что немного странно, поэтому я думаю, что ваша строка toString будет выглядеть, например,

@Override
public String toString() {
    StringBuilder out = new StringBuilder();
    for (String name : names) {
        out.append(name);
        out.append(", ");
    }
    for (int i = 0; i < grades.length - 1; i++) {
        out.append(grades[i]);
        out.append(", ");
    }
    out.append(grades[grades.length - 1]);

    return out.toString();
}
0 голосов
/ 01 декабря 2018

Вы печатаете:*

System.out.println(studentGrades[i].getGrade()[0]);

Редактировать

public static StudentGrade findMinGrade(StudentGrade[] studentGrades) {
    StudentGrade studentGradeMin = studentGrades[0];
    for(int i=1; i < studentGrades.length; i++) {
        if(studentGrades[i].getGrade()[0] < studentGradeMin.getGrade()[0]) {
            studentGradeMin = studentGrades[i];
        }
    }
    return studentGradeMin;
} 

Проверьте, надеюсь, опечаток нет.Это возвращает StudentGrade объект внутри массива studentGrades с минимальной оценкой.

...