Saya mencoba mengurutkan array objek berdasarkan nama yang ada di dalam array.
grades[].name
Saya menggunakan metode penyisipan dengan penyortiran leksikografis menggunakan bandingkanTo dan ini berfungsi jadi saya tahu saya menggunakan bandingkanTo dengan benar tetapi tidak semua nama dipindahkan dengan benar dan saya tidak yakin apakah itu pemahaman saya tentang cara kerja leksikografis atau jika loop saya yang menyebabkan masalah. Saya tahu leksikografik membandingkan setiap huruf dengan sendirinya untuk menentukan tempatnya. Saya awalnya mengira itu hanya memberi string nilai numerik dan sedang mencari cara untuk menemukannya, tetapi menurut saya bukan itu masalahnya. Saya telah melihat pertanyaan lain sehubungan dengan cara kerja penyortiran ini tetapi tampaknya tidak menjelaskan masalah saya. Saya ingin tahu apakah masalah saya adalah perulangan, pemahaman saya tentang metode pengurutan atau hal lain yang menyebabkan masalah keluaran ini.
Saya memiliki 3 kelas. Objek yang memanggil metode .insert adalah referensi ke kelas yang berisi array saya yang sebenarnya sehingga array tersebut dapat tetap bersifat pribadi.
`GradeArray gradeArr = new GradeArray();
gradeArr.insert("Evans", 78, courseID);
gradeArr.insert("Smith", 77, courseID);
gradeArr.insert("Yee", 83, courseID);
gradeArr.insert("Adams", 63, courseID);
gradeArr.insert("Hashimoto", 91, courseID);
gradeArr.insert("Stimson", 89, courseID);
gradeArr.insert("Velasquez", 72, courseID);
gradeArr.insert("Lamarque", 74, courseID);
gradeArr.insert("Vang", 52, courseID);
gradeArr.insert("Creswell", 88, courseID);`
ini untuk membuat entri dalam array.
Inilah lingkaran penyortiran saya.
` public String reportgrades() //this is grade sorted by name
{
String output = "Sorted by name ";
int in, out;
StudentGrade temp; //this is to hold the orginal variable.
//for the first letter cycle
for (out = 1; out < nElems; out++) {
temp = grades[out];
in = out;
while (in > 0 && 0 < (grades[in - 1].name.compareTo(grades[in].name))) {
grades[in] = grades[in - 1];
in--;
}
grades[in] = temp;
}
for (int j = 0; j < nElems; j++) {
output += grades[j].name + ", ";
}
return output;
}`
Output yang dibuat adalah Sorted by name Evans, Smith, Adams, Hashimoto, Stimson, Velasquez, Lamarque, Vang, Creswell, Yee,
Saya bingung kenapa Evans dan Smith lebih dulu dari Adams. Saya telah mencoba melihat dokumen tentang cara kerja CompareTo tetapi sepertinya saya tidak melihat apa pun yang dapat memberi saya informasi apa pun tentangnya.