这是一个家庭作业问题,所以我不希望为我做完。话虽如此,我遇到了一个问题。我理解选择排序,可以编写一个代码来为我做,但我不知道如何访问我需要排序的对象的特定部分。在这种情况下,它是学生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的任何尝试均未成功,因此感谢任何帮助。
答案 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方法感兴趣,请考虑使用比较器。