我是初学java课程的学生,我今天早些时候在我的任务中得到了一些帮助,这真的很有帮助!所以我想在我最后一部分放弃之前再试一次。我已经能够把一切都搞定了,但是我的那种不行。我必须使用这种格式,因为我的教授不希望我们使用排序API。它正确处理,这意味着我可以手动获得与运行时相同的结果,因此我认为问题出在逻辑本身。任何人都可以看到我做错了什么,并提供任何提示或帮助。提前致谢。这是我的排序循环的代码:
int i, j; // used to index into the array
double temp;
for (i = 1; i < count ; ++i) {
temp = students[i].getGPA();
j = i - 1;
while (j >= 0 && temp < students[j].getGPA())
{
students[j + 1] = students[j];
j = j - 1;
}
students[j + 1]= students[i];
}
答案 0 :(得分:1)
您没有正确进行交换。请查看以下示例代码:
for (int i = 0; i < students.length; i++)
{
for (int j = 1; j < students.length - i; j++)
{
if (students[j - 1].getGPA() > students[j].getGPA())
{
// assuming that your class name is Student
Student temp = students[j - 1];
students[j - 1] = students[j];
students[j] = temp;
}
}
}
答案 1 :(得分:0)
你的问题是,通过while循环的第一次迭代会覆盖学生[i]。当您进入for循环时,您需要将学生[i]而不仅仅是GPA保留在临时值中。
答案 2 :(得分:0)
稍微改进了你的逻辑。 Plz验证适当性!
package com.kvvssut.misc;
public class SortArray {
public static void main(String[] args) {
double [] studentsGPA = {8.3,7.2,10,6.5,4.9};
int count = studentsGPA.length;
int i, j; // used to index into the array
double temp;
for (i = 1; i < count ; ++i) {
j = i;
while (j > 0 && (temp = studentsGPA[j]) < studentsGPA[--j]) { // can use students[j].getGPA() similarly
studentsGPA[j+1] = studentsGPA[j];
studentsGPA[j] = temp;
}
}
for (double sgpa : studentsGPA ) {
System.out.println(sgpa);
}
}
}