-1

有人可以帮我让这个冒泡排序工作吗?我是一名 Java 初学者,之前从未使用过排序或数组。我还需要使用菜单中的 if 语句对其进行初始化。

冒泡排序法:

private void sort(int grade, Student[] students) {

    int temp = 0; // temporary holding area for swap
    int i, j;

    if (students.length < 2) {return;}
    // Loop through length of the array
    for (Student student : students) {
    for (i = 0; i < students.length; i++ ) {
    // Check to see if there is anything smaller and replace
        for ( j = i+1; j < students.length - 1; j++) {
            if (student[i] > student[j])
            {
                temp = student[i];
                student[i] = student[j];
                student[j] = temp;

到目前为止的菜单:(需要添加选项 7 才能使冒泡排序起作用??)

public static void UserSelection(Scanner input, int numStudents,
            Student[] students) {
        // Repeatedly process menu selections by the user.
        int choice;
        do {
            System.out.println();
            System.out.println("*** Student Exam Results Menu ***");
            System.out.println("(1) Display the results");
            System.out.println("(2) Display the average result");
            System.out.println("(3) Display the highest grade");
            System.out.println("(4) Display the lowest grade");
            System.out.println("(5) Search for specific result");
            System.out.println("(6) Search for student grade by name");
            System.out.println("(7) Sort the results in ascending order");
            System.out.println("(8) quit");
            choice = input.nextInt();

            if (choice == 1)
            {
                System.out.println(Arrays.toString(students));
            } else if (choice == 2)

            {
                double average = getAverage(students);
                System.out.println("average grade = " + average);
            } else if (choice == 3)

            {
                int high = getHighest(students);
                System.out.println("high grade = " + high);
            } else if (choice == 4)

            {
                int low = getLowest(students);
                System.out.println("low grade = " + low);

            } else if (choice == 5)

            {
                System.out.print("Result to look for: ");
                int grade = input.nextInt();
                 if (result(grade, students)) {
                 System.out.println(grade +
                 " is in the collection of grades.");
                 } else

                 {
                 System.out.println(grade +
                 " is not in the collection of grades.");
                 }

            } else if (choice == 6)

            {
                System.out.print("Student to search for: ");
                String name = input.nextLine();
                if (search(name, students) ==null)
                {
                    System.out.println(name +
                    " is in the list of Students.");
                } else
                {
                System.out.println(name +
                " is not in the list of Students");
                }
            }
4

1 回答 1

1

该类Strudent应实现Comparable. 该compareTo方法的实现只比较name属性,如果您需要比较其他属性,您应该将它们类似地包含在该方法中。

public class Student implements Comparable<Student> {
  private String name;
  private int grade;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getGrade() {
    return grade;
  }
  public void setGrade(int grade) {
    this.grade = grade;
  }
  public int compareTo(Student o) {
    return this.getName().compareTo(o.getName());
  }
}

实现排序使用

  //Sort
  public static void sort(Student[] students)
  {
    int j;
    boolean flag = true; // set flag to true to begin first pass
    Student temp;  //holding variable

    while (flag)
    {
      flag = false; //set flag to false awaiting a possible swap
      for (j = 0; j < students.length -1; j++)
      {
        if (students[j].compareTo(students[j+1]) < 0) // change to > for ascending sort
        {
          temp = students[j];  //swap elements
          students[j] = students[j+1];
          students[j+1] = temp;
          flag = true;  //shows a swap occurred 
        }
      }
    }
  }
于 2013-03-20T12:42:50.930 回答