因此,我应该创建一个要求类大小的程序。然后使用该大小,输入学生姓名和分数,直到填满班级大小。完成此操作后,我应该调用一个selectionSort方法以按降序对分数进行排序。因此,输出本质上是一个表。一列是名称,另一列是分数,并且分数应该以其适当的名称降序排列。我把大部分程序都弄下来了,我只是想不通如何将学生的名字与他们输入的分数联系起来。有人可以引导我正确行事吗?我很茫然。这是我的程序:

import java.util.Scanner;
public class Roster {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        input.useDelimiter(System.getProperty("line.separator"));
        System.out.print("Enter the size of the class: ");
        int size = input.nextInt();
        double[]score = new double[size];
        String[]name = new String[size];
        for(int i = 0; i < size; i++){
            System.out.print("Please enter a student name: ");
            String n = input.next();
            name[i] = n;
            System.out.print("Please enter " + n + "'s score: ");
            double s = input.nextDouble();
            score[i] = s;
            System.out.println();
        }
        selectionSort(score,name);
        System.out.print("THe class size is: " + size + "\n");
        System.out.print("Name         Score\n");
        System.out.print("----         -----\n");
        for(int i = 0; i < name.length; i++)
            System.out.println(name[i] + " " + score[i] + " ");
        System.out.println();
    }

    public static void selectionSort(double[] score, String[] name){
        for(int i = score.length-1; i > 0; i--){
                int maxIndex = 0;
                for(int j = 1; j <= i; j++)
                    if(score[j] < score[maxIndex])
                        maxIndex = j;
                double temp = score[i];
                score[i] = score[maxIndex];
                score[maxIndex] = temp;
        }
    }
}

最佳答案

我已经评论了一个简单的解决方案,但实际上最好的办法是创建一个名册条目类:

public class RosterEntry {
    private String name;
    private double score;

    /*Accessors and Mutators*/
}


然后,在您的main中,您可以维护RosterEntry的列表或数组,以便在选择排序中进行交换时,可以交换RosterEntry而不是分别替换分数和名称。

10-08 08:52