2016-09-08 2 views
0

имейте проблемы, закончив мою работу, потому что я не знаю, как сортировать имена вместе со степенью в восходящем и нисходящем. Надеюсь, вы, ребята, можете помочь.Сортировка имен студентов

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]); 

     } 

    } 
} 
+0

Эта проблема является своего рода сортировочным объектом. Вы можете обратиться к ответу на эту ссылку http://stackoverflow.com/questions/1206073/sorting-a-collection-of-objects – Minh

+1

Вы попробовали метод Arrays.sort()? – Arthas

+0

Если это проблема домашних заданий, в которой вам необходимо реализовать базовый алгоритм сортировки, обязательно передайте это в своем вопросе. – StaticBeagle

ответ

0

Вы можете просто соединить имя и оценку и отсортировать их, чтобы это было намного проще.

+0

Ничего о O-O? –

+4

Ну, похоже, он совсем не знаком с программированием, и я бы не хотел усложнять его. –

0

Если вы хотите сделать это своим путем, не изменяя, как массивы хранятся отдельно. Вы не сможете использовать метод Arrays.sort() для сортировки ваших оценок, поскольку это не учитывает массив имен, и вы потеряете связь между ними, чтобы оценки больше не соответствовали именам.

Вы можете очень быстро скопировать свой собственный сортировщик пузырьков, чтобы быстро отсортировать массив, а затем вы можете использовать свой цикл, чтобы влиять на массив имен в одно и то же время. Но если вы не хотите кодировать свой собственный сортировщик, вам нужно будет упорядочить массив оценок и имен так, чтобы его можно рассматривать как единицу в отдельном классе.

Если вы закодировать свой собственный сортировщик, то здесь отличная ссылка, чтобы узнать, что: http://www.java-examples.com/java-bubble-sort-example

Если вы решили изменить способ, которым вы храните ранги и названия, вот как вы можете использовать Массивы .sort(): http://www.homeandlearn.co.uk/java/sorting_arrays.html

+3

Вы знаете, что каждый раз, когда кто-то (советует) использует пузырьки, щенок умирает? –

+0

@AdriaanKoster И почему бы это было ... – Cutter

+0

Нет ничего плохого в том, что начинающий программист учится использовать основные алгоритмы сортировки, не используя при этом множество стандартных методов библиотеки. Вы не можете просто выбросить 1000 единиц информации у кого-то и ожидать, что они узнают что-нибудь. – Cutter

3

Вы используете 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, который предоставляет заданные значения для вашего теста. См. Раздел модульного тестирования.

+0

Я думаю, что 'Arrays.sort (arrayName)' будет выполнять задание сортировки – emotionlessbananas

+0

дать человеку рыбу, и вы будете кормить его в течение дня ; научить человека ловить рыбу, и вы кормите его на всю жизнь –

+0

спасибо! .. :) –

Смежные вопросы