【问题标题】:How to fill Object Array and find minimum value for the Object Array如何填充对象数组并找到对象数组的最小值
【发布时间】:2019-05-02 23:36:15
【问题描述】:

编辑解决方案

根据 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

【问题讨论】:

  • 您如何定义最小值,从您的问题中不清楚?

标签: java object arraylist constructor text-files


【解决方案1】:

您正在打印:

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

但是getGrade()返回一个数组,所以改成这样:

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

或者如果数组只包含 1 个数字:

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

检查一下,希望没有错别字。
这将返回数组studentGrades 内的StudentGrade 对象,其最小等级。

【讨论】:

  • @forpas - 谢谢。我是新手,不知道这意味着什么,但想知道我不能接受 2 个答案吗?两者都很好。
  • @Thi 不,您只能接受 1 个答案。当您获得至少 15 名代表时,您也可以对您认为有用的答案进行投票。
  • 你知道如何找到对象数组的最小值吗?可以用double类型数组,但是不知道怎么用Object数组类型?
  • 如果你的意思是最小索引,它总是 0。如果你的意思是别的,请举个例子。
  • 这是我的对象数组:John 97.5 Jim 99 Kathy 34 Steve 86.5 Stacy 43 Faith 88 -- 我需要使用上面的 findMinIndex(StudentGrade[] studentGrades) 方法显示最小的数字。
【解决方案2】:

最简单的方法是从 Object 类中重写 String toString() 方法,因为这是打印对象时使用的默认方法

所以在你的 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();
}

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2013-03-10
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多