java - 为什么我的冒泡排序不起作用? java

标签 java sorting bubble-sort

第一次发帖! 我有一项作业要求我编写一个 Java 程序,该程序从文本文件中读取数据并根据分数及其首字母对其进行排序。 文本文件如下:

John Doe 75
Joe Blow 65
Mary Smith 80
John Green 82
Jill White 97

这是我的代码:

import java.util.Scanner;
public class HelloWorld{
public static void main(String[] args) throws Exception{
    String[] firstName = new String[5];
    String[] lastName = new String[5];
    int score[] = new int[5];
    java.io.File file = new java.io.File("data.txt");
    Scanner input = new Scanner(file);

        int c=0;
        while(input.hasNext()){
            firstName[c] = input.next();
            lastName[c] = input.next();
            score[c] = input.nextInt();
            c++;
        }
        input.close();

    MichaelBubbleSort(score);
    for(int x=4;x>=0;x--){
        System.out.print(firstName[x].substring(0,1) + lastName[x].substring(0,1) + " " + score[x]);
        System.out.println();
    }
}


public static void MichaelBubbleSort(int[] arr){
    int temp;
    for(int i=0; i < arr.length-1; i++){

        for(int j=1; j < arr.length-i; j++){
            if(arr[j-1] > arr[j]){
                temp=arr[j-1];
                arr[j-1] = arr[j];
                arr[j] = temp;
       }
     }
   }
 }

但由于某种原因,它总是出现:

JW 97                                                                                                                                                            
JG 82                                                                                                                                                            
MS 80                                                                                                                                                            
JB 75                                                                                                                                                            
JD 65  

输出应该是:

JW 97
JG 82
MS 80
JD 75
JB 65

这种情况持续发生的原因是什么?

最佳答案

这是根据您的代码的解决方案。但代码必须比这个更好。你应该使用集合类。 在此代码中,您需要相应地交换名称。

import java.util.Scanner;

public class HelloWorld{
    public static void main(String[] args) throws Exception {
        String[] firstName = new String[5];
        String[] lastName = new String[5];
        int score[] = new int[5];
        java.io.File file = new java.io.File("D:\\test.txt");
        Scanner input = new Scanner(file);

        int c = 0;
        while (input.hasNext()) {
            firstName[c] = input.next();
            lastName[c] = input.next();
            score[c] = input.nextInt();
            c++;
        }
        input.close();

        MichaelBubbleSort(score,firstName,lastName);
        for (int x = 4; x >= 0; x--) {
            System.out.print(firstName[x].substring(0, 1)
                    + lastName[x].substring(0, 1) + " " + score[x]);
            System.out.println();
        }
    }

    public static void MichaelBubbleSort(int[] arr,String[] firstName, String[] lastName) {
        int temp;
        String tempFirstName,tempLastName;
        for (int i = 0; i < arr.length - 1; i++) {

            for (int j = 1; j < arr.length - i; j++) {
                if (arr[j - 1] > arr[j]) {
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;

                    tempFirstName = firstName[j -1];
                    firstName[j - 1] = firstName[j];
                    firstName[j] = tempFirstName;

                    tempLastName = lastName[j -1];
                    lastName[j - 1] = lastName[j];
                    lastName[j] = tempLastName;
                }
            }
        }
    }
}

关于java - 为什么我的冒泡排序不起作用? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787284/

相关文章:

Java排序和可迭代的Defaultlistmodel

algorithm - (合并排序)是 n log n 的 log,以 2 为底?

java - 冒泡排序不会完全计算

java - 选择排序和冒泡排序——如何统计比较次数和交换次数?

java - 我们可以将处理视为数学建模和编程的环境吗?

java - LocalVariableTable 中缺少什么?

Java执行器在特定时间的时间范围内

在允许的重量范围内配对 2 个对象的算法?

c - 冒泡排序链表

java - 客户端-服务器应用程序 JAVA,服务器不接收数据