使用选择排序对对象数组进行排序?

时间:2014-04-07 01:47:33

标签: java arrays sorting object

这是一个家庭作业问题,所以我不希望为我做完。话虽如此,我遇到了一个问题。我理解选择排序,可以编写一个代码来为我做,但我不知道如何访问我需要排序的对象的特定部分。在这种情况下,它是学生ID号。

我获得了一个部分课程,一个学生课程(根据我们给出的另一个文件中的值创建学生)。

import TextIO.*;

public class StudentQEg {


static void sortByID(int[] A) {


for (int lastPlace = A.length-1; lastPlace > 0; lastPlace--) {   
  int maxLoc = 0;
  for (int j = 1; j <= lastPlace; j++) {
     if (A[j] > A[maxLoc]) {
        maxLoc = j;  
     }
  }
  int temp = A[maxLoc];
  A[maxLoc] = A[lastPlace];
  A[lastPlace] = temp;

 }

}

public static void main(String args[]){

StudentQ[] students;
int nbrstuds;
String name;
int id;
double avg;

TextIO.readUserSelectedFile();
nbrstuds=TextIO.getlnInt();

students=new StudentQ[nbrstuds];

for (int i=0; i<nbrstuds; i++) {
   name=TextIO.getWord();
   id=TextIO.getInt();
   avg=TextIO.getlnDouble();
   students[i]=new StudentQ(name,id,avg);
}

sortByID(students);

for (int i=0; i<nbrstuds; i++) {
   TextIO.putln(students[i]);
}

} 
}

这显然会抛出sortByID([int [])不适用于args(StudentQ [])的错误。我尝试引用StudentQ [] .id的任何尝试均未成功,因此感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

为什么不将方法签名从static void sortByID(int[] A)更改为static void sortByID(StudentQ[] students)

更改方法签名后,您可以执行以下操作进行比较:

if (students[j].id > students[maxLoc].id)

答案 1 :(得分:0)

方法sortById应该接受StudentQ数组而不是int数组。整数没有可用作排序参数的id。 StudentQ []。id将无效,因为字段ID在StudentQ上。以下是实现此功能所需的重构片段:

static void sortByID(StudentQ[] A) {

for (int lastPlace = A.length-1; lastPlace > 0; lastPlace--) {   
  int maxLoc = 0;
  for (int j = 1; j <= lastPlace; j++) {
     if (A[j].id > A[maxLoc].id) {
        maxLoc = j;  
     }
  }
  StudentQ temp = A[maxLoc];
  A[maxLoc] = A[lastPlace];
  A[lastPlace] = temp;

 }

如果您对探索更多java-esque方法感兴趣,请考虑使用比较器。