【发布时间】:2018-02-03 21:38:30
【问题描述】:
我正在尝试按数组内部的名称对对象数组进行排序。
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 的工作方式,但我似乎没有看到任何可以为我提供任何信息的信息。
【问题讨论】:
-
这是一种家庭作业,主要挑战是编写自己的排序算法吗?或者你为什么不使用内置排序?
-
也许 SO 有上进心,想写一个排序。它可能会发生。
-
说真的,这是 SO 和他/她的调试器的工作。逐步完成。
-
当你找到一个“更大”的名字时,while 循环就会被中断,“Adams”会被更改为“Yee”。它总是 'greater'。所以while循环在到达/移动“Yee”后总是会被打断。
标签: java sorting insertion-sort lexicographic