排序学生姓名

时间:2016-09-08 09:27:45

标签: java

我在完成工作时遇到了麻烦,因为我不知道如何按升序和降序等级对名称进行排序。我希望你们能帮忙。

import java.util.Scanner;

public class SortingStudents {


    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);

        System.out.print("Enter the number of students: ");
        int capacity = s.nextInt();

        String [] name = new String[capacity];
        Double [] grade = new Double[capacity];

        for(int i = 0; i < capacity; i++) {
            System.out.print("student's name: ");
            name [i] = s.next();
            System.out.print("grade: ");
            grade [i] = s.nextDouble();
        }

        Scanner input = new Scanner(System.in);
        System.out.println("Type A for Ascending D for Descending:");
        char a=input.nextLine().charAt(0);

        if(a == 'A' || a == 'a'){
        for(int i = 0; i<grade.length;i++){
            System.out.println(grade[i]+"\t" +grade[i]);

        }

    }
}

3 个答案:

答案 0 :(得分:3)

您正在使用Java,这是一种面向对象的编程语言。这意味着您可以根据代表问题域中状态的类来考虑您的问题,并具有操纵此状态的行为(方法)。

在这种情况下,您的代码会显示几种责任,您可以为其创建有用的类和/或方法:

  • 通过命令行输入数据(学生人数,姓名和等级以及所需的排序方向)
  • 具有固定大小的学生注册表
  • 按所需方向对学生注册表进行排序

想到的类名是:DataEntry,Student,StudentRegistry。为了以不同的方式对学生进行排序,标准方法是创建一个Comparator类,见下文。

这些类看起来大致如下:

public class Student {
    private String name;
    private Double grade;

    // getters and setters ommitted for brevity
}

注册表:

public class StudentRegistry {
    // it's easier to use a List because you are adding students one by one
    private List<Student> students;

    public StudentRegistry(int capacity) {
        // ...constructor code initializes an instance of StudentRegistry 
    }

    public void addStudent(Student student) {
        // add a student to the list
    }

    public Student[] getStudents(Comparator<Student> comparator) {
         // sort the list using the comparator and Collections.sort()
         // use List.toArray() to convert the List to an array 
         // alternatively (java 8) return a Stream of Students
         // or return an unmodifiable List (using Collections.unmodifiableList())
         // you don't want to expose your modifiable internal List via getters
    }

}

可以对升序或降序进行排序的比较器。您可以考虑添加按等级或名称排序的功能,这很容易。

public class StudentComparator implements Comparator<Student> {
    public enum Direction {
         ASCENDING, DESCENDING
    }

    // optional addition:
    //public enum Field{
    //     NAME, GRADE
    //}

    // if used, add Field parameter to the constructor
    public StudentComparator(Direction direction) {
        // initialize instance
    }

    @Override 
    public int compare(Student a, Student b) {
         // implement Comprator method, see JavaDoc
    }

    @Override
    public boolean equals(Object o) {
         // implement equals, see JavaDoc
    }
}

让用户输入数据的类:

public class DataEntry {

    public int getNumberOfStudents() {
        // ...
    }

    public Student getStudent() {
        // ...
    }

    public StudentComparator.Direction getSortingDirection() {
        // ...
    }
}

还有一个主要课程:

public class Main {

    public static void main(String[] args) {

        DataEntry dataEntry = new DataEntry();
        int capacity = dataEntry.getCapacity();
        StudentRegistry studentRegistry = new StudentRegistry(capacity);
        for(int i=0; i<= capacity; i++) {
            studentRegistry.addStudent(dataEntry.getStudent());
        }
        StudentComparator comparator = new StudentComparator(dataEntry.getSortingDirection());
        Student[] students = studentRegsitry.getStudents(comparator);
    }
}

这种方法将问题的关注点分离在单独的类和方法中,使代码更容易理解,调试和测试。

例如,要测试Main类,您可以设置一个模拟DataEntry类,为您的测试提供预定值。请参阅单元测试主题。

答案 1 :(得分:0)

您可以将名称和等级连接起来并对它们进行排序,这样可以轻松实现。

答案 2 :(得分:0)

如果您想按照自己的方式进行操作,而无需更改数组的存储方式。您将无法使用Arrays.sort()方法对成绩进行排序,因为这不会考虑名称数组,并且您将失去它们之间的链接,以使成绩不再与名称匹配。

您可以非常快速地编写自己的冒泡分拣机以快速对数组进行排序,然后您可以使用循环同时影响名称数组。但是,如果您不想编写自己的分拣机代码,则需要组织您的成绩和名称数组,以便可以将其视为一个单元,即在单独的类中。

如果您选择编码自己的分拣机,那么这里有一个很好的链接可以了解:http://www.java-examples.com/java-bubble-sort-example

如果您选择更改存储成绩和名称的方式,以下是使用Arrays.sort()方法的方法: http://www.homeandlearn.co.uk/java/sorting_arrays.html