【问题标题】:Selection sort a roster选择对花名册进行排序
【发布时间】:2015-07-01 22:23:26
【问题描述】:

所以我应该创建一个询问班级人数的程序。然后使用该规模,输入学生姓名和分数,直到填满班级规模。之后,我应该调用一个 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;
        }
    }
}

【问题讨论】:

  • 您可以做的一件事是,当您交换分数时,您可以交换具有相同索引的名称。
  • @mstbaum 我将如何交换具有相同索引的名称?
  • 您有索引i 和索引maxIndex 所以使用它们来索引您的name 数组并执行与score 数组相同的交换(您还需要一个临时字符串)。不过,我真的建议使用一个类,就像我在回答中描述的那样。

标签: java arrays sorting for-loop


【解决方案1】:

您可以创建一类对,并将其存储在一个数组中。因此:

public class MyPair
{
    private final String name;
    private final Double score;

    public MyPair(String aName, Double aScore)
    {
        name= aName;
        score = aScore;
    }

    public String getName()   { return name; }
    public Double getScore() { return score; }
}

然后您可以创建一个 MyPair 类型的简单数组,

MyPair[] pupils = new MyPair(20);

您可以通过以下方式访问学生的详细信息

pupils[i].getName;

pupils[i].getScore;

【讨论】:

    【解决方案2】:

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

    public class RosterEntry {
        private String name;
        private double score;
    
        /*Accessors and Mutators*/
    }
    

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

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多