Java-数组中的气泡排序对象

Java-数组中的气泡排序对象,java,arrays,sorting,object,Java,Arrays,Sorting,Object,已解决在帖子末尾固定了代码以及进度 如果我的问题不清楚或遗漏了什么,我会提前道歉。我不熟悉编程和java,所以我可能还不知道如何恰当地表达我的问题。我将设置您应该知道的内容,以便帮助我回答我的问题,然后提问。如果我能把事情说得更清楚,我会继续编辑这篇文章 我有一个数组arrStudents,共(7)个Student对象:(firstName、lastName、grade)(String、String、int) getGrade()返回等级 我想创建一个方法,对数组进行气泡排序并打印,例如,这是排

已解决在帖子末尾固定了代码以及进度

如果我的问题不清楚或遗漏了什么,我会提前道歉。我不熟悉编程和java,所以我可能还不知道如何恰当地表达我的问题。我将设置您应该知道的内容,以便帮助我回答我的问题,然后提问。如果我能把事情说得更清楚,我会继续编辑这篇文章

我有一个数组arrStudents,共(7)个Student对象:(firstName、lastName、grade)(String、String、int)

getGrade()返回等级

我想创建一个方法,对数组进行气泡排序并打印,例如,这是排序前的输出:

John Smith 90
Barack Obama 95
Al Clark 80
Sue Taylor 55
Ann Miller 75
George Bush 58
John Miller 65
这是排序后的输出

Sue Taylor 55
George Bush 58
John Miller 65
Ann Miller 75
Al Clark 80
John Smith 90
Barack Obama 95
我有一些代码可以使用,但它没有给我任何帮助。下面是使用气泡排序的示例:

import java.util.Scanner;

class array {

public static void main (String[] args) 
{

Scanner scan = new Scanner(System.in);

int [] a = new int [100];
int i, n = 0, min, max;
float  total = 0;

System.out.println ("Enter integers separated by blanks (<Enter> <Ctrl-Z> to end):");

while (scan.hasNext()) {
   a[n] = scan.nextInt();
   n = n + 1;
}

min = a[0];
max = a[0];
for (i = 0; i < n; i++) {
  if (max < a[i]) max = a[i];
  if (min > a[i]) min = a[i];
  total = total + a[i];
}

System.out.print ("You entered " + n + " numbers: ");
System.out.print ("Min = " + min + ", Max = " + max + ", Average = " + total/n);

int t, swap = 0;
do { 
    swap = 0; 
    for (i=0; i<n-1; i++) 
       if (a[i]>a[i+1]) {
           t=a[i]; 
           a[i]=a[i+1]; 
           a[i+1]=t; 
           swap++;
       }
} while (swap>0);

System.out.print ("\nSorted: ");
for (i=0; i<n; i++) System.out.print (a[i] + " ");
System.out.println ();

 }
}
修复了代码(带升序输出)-我之前尝试的打印结果太愚蠢了

public static void bubbleSort(Student [] arrStudents) {
int swap = 0;    
do {
    swap = 0;
    for (i=0; i<arrStudents.length-1; i++){
      Student tmp = arrStudents[i];  
      int grade = arrStudents[i].getGrade();
      int gradePlus = arrStudents[i+1].getGrade();
       if (grade>gradePlus) {
        arrStudents[i] = arrStudents[i+1];
        arrStudents[i+1]=tmp;
        swap++;
       }          
    }
} while (swap>0);    
System.out.print ("\nSorted: ");
for (i=0; i<arrStudents.length; i++) 
System.out.print ("\n" + arrStudents[i]);
}
我在这件事上被难住了一段时间,所以任何帮助都将不胜感激

tl;dr Help me修复上述最接近的气泡排序代码

编辑:也知道可能有更好的排序方法,但对于这个程序,我需要使用冒泡排序

int grade = arrStudents[i].getGrade();
int gradePlus = arrStudents[i+1].getGrade();
   if (grade>grade+1) {
在这段代码中,你说grade大于grade+1,这永远不会是真的,你想写下面的代码

int grade = arrStudents[i].getGrade();
int gradePlus = arrStudents[i+1].getGrade();
   if (grade>gradePlus ) {

这种排序的实际排序发生在
swap
部分。必须移动排序数组中的元素才能执行排序操作

您必须交换
arrsudents[i]
arrsudents[i+1]
,因为您正在排序的是
arrsudents

Student tmp = arrStudents[i];
arrStudents[i] = arrStudents[i+1];
arrStudents[i + 1] = tmp;
然后(同样由@maczikasz指出),您的测试条件是错误的。使用:

if (grade > gradePlus) {
    // Do the swap as above, increment the swap counter
}

那么,使用最小值/最大值进行比较?实际上,我在另一个方法中设置了它,看起来像if(student.getGrade()>max.getGrade())max=student;你在哪里处理学生的名字?或者你可以忽略它们,只对分数进行排序吗?@MarcMosby:正确的方法是实施
可比性
,而不是重新发明命名惯例。@PeterLawrey maxzikasz在他的回答中谈到了这一点。我的问题是,我无法让arrsudents[I]使用操作符,所以我试图让它与getGrade一起工作。所以在交换之后,我应该能够坚持System.out.println(arrsudents[I]);并将其作为参数传递给main方法进行打印,对吗?它不起作用了。编译了所有的东西,但是我没有得到正确的输出。好吧,我现在几乎让它工作了,它按降序打印,但没关系。输出仍然非常时髦。打印成绩最大的学生对象5次,重复第2次和第3次,然后打印列表中的第4个学生对象两次。我会编辑原始的帖子。我在哪里贴的很愚蠢,这很有效!哎呀,谢谢你的接球。我一直在玩代码,但错过了。
int grade = arrStudents[i].getGrade();
int gradePlus = arrStudents[i+1].getGrade();
   if (grade>grade+1) {
int grade = arrStudents[i].getGrade();
int gradePlus = arrStudents[i+1].getGrade();
   if (grade>gradePlus ) {
Student tmp = arrStudents[i];
arrStudents[i] = arrStudents[i+1];
arrStudents[i + 1] = tmp;
if (grade > gradePlus) {
    // Do the swap as above, increment the swap counter
}