Вы используете Java, являющийся объектно-ориентированным языком программирования. Это означает, что вы можете думать о своей проблеме с точки зрения классов, которые представляют состояние в вашей проблемной области и имеют поведение (методы), которые манипулируют этим состоянием.
В этом случае ваш код показывает несколько удовлетворения претензий, для которых можно создать полезные классы и/или методы:
- Ввод данных с помощью командной строки (количество студентов, имя и класс и желаемое направление сортировки)
- реестр студентов с фиксированным размером
- сортировочного студенческую реестра в нужном направлении
имена классов, которые приходят на ум: данные Вступление, Студент, Студенческий реестр. Для сортировки студентов по-разному стандартный подход создает класс 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, который предоставляет заданные значения для вашего теста. См. Раздел модульного тестирования.
Эта проблема является своего рода сортировочным объектом. Вы можете обратиться к ответу на эту ссылку http://stackoverflow.com/questions/1206073/sorting-a-collection-of-objects – Minh
Вы попробовали метод Arrays.sort()? – Arthas
Если это проблема домашних заданий, в которой вам необходимо реализовать базовый алгоритм сортировки, обязательно передайте это в своем вопросе. – StaticBeagle