Java 我需要对一个对象数组进行排序,并将它们从高到低排序

Java 我需要对一个对象数组进行排序,并将它们从高到低排序,java,arrays,sorting,Java,Arrays,Sorting,我是一名java初级班的学生,今天早些时候我的作业得到了一些帮助,真的很有帮助!所以我想在我放弃这最后一部分之前,我会再试一次。我已经能够让一切顺利,但我的那一类根本不起作用。我必须使用这种格式,因为我的教授不希望我们使用排序API。它处理正确,这意味着我手动得到的结果与运行它时相同,因此我认为问题在于逻辑本身。有人能看出我做错了什么,并提供任何提示或帮助吗。提前谢谢。以下是我的排序循环代码: int i, j; // used to index into the array d

我是一名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];
    }
inti,j;//用于索引到数组中
双温;
对于(i=1;i=0&&temp
您的问题是,while循环的第一次迭代会覆盖学生[i]。当您输入for循环时,您需要将学生[i]而不仅仅是其GPA保留在一个临时值中。

您的交换操作不正确。检查此示例代码:

        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;
                }
             }
        }
for(int i=0;i学生[j].getGPA())
{
//假设你的班名是学生
学生临时工=学生[j-1];
学生[j-1]=学生[j];
学生[j]=临时工;
}
}
}

稍微细化了您的逻辑。请验证是否合适

    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);
            }
        }

    }
package com.kvssut.misc;
公营索塔雷酒店{
公共静态void main(字符串[]args){
双[]学生SGPA={8.3,7.2,10,6.5,4.9};
int count=studentsGPA.length;
int i,j;//用于索引到数组中
双温;
对于(i=1;i0&(temp=studentsGPA[j])
可能是重复的谢谢,我已经看完了。谢谢你的回答。我以前尝试过,但是我很难让数据类型匹配。当我把temp作为一个像students[I]这样的对象时,它会让我将它们与“太好了!我用这种方式,起初它抛出了一个错误,但我只需将第二个for循环更改为比students小一个。长度和效果都很好。非常感谢!!!