Я пытаюсь отсортировать массив объектов по именам, которые находятся внутри массива.
grades[].name
Я использую метод вставки с лексикографической сортировкой с использованием compareTo, и он вроде работает, поэтому я знаю, что правильно использую compareTo, но не все имена перемещаются правильно, и я не уверен, правильно ли я понимаю, как работает лексикографический или если моя петля вызывает проблему. Я знаю, что лексикографический сравнивает каждую букву отдельно, чтобы определить место. Первоначально я думал, что это просто дает строке числовое значение, и искал способ найти это, но я не думаю, что это было так. Я просмотрел другие вопросы о том, как работает эта сортировка, но, похоже, это не проливает света на мою проблему. Я хотел бы знать, являются ли мои проблемы циклом, моим пониманием метода сортировки или чем-то еще, вызывающим эту проблему вывода.
У меня 3 класса. Объект, вызывающий метод .insert, является ссылкой на класс, который содержит мой фактический массив, поэтому массив может оставаться закрытым.
`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);`
это сделать записи в массиве.
Вот мой цикл сортировки.
` 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;
}`
Вывод, который это создает, Sorted by name Evans, Smith, Adams, Hashimoto, Stimson, Velasquez, Lamarque, Vang, Creswell, Yee,
Я не понимаю, почему Эванс и Смит раньше Адамса. Я попытался просмотреть документы о том, как работает compareTo, но, похоже, я не нашел ничего, что могло бы дать мне какую-либо информацию об этом.