2013-09-25 6 views
1

хорошо, мой проект java почти закончен, но имеет еще одну часть, с которой нужно иметь дело, сортируя. Я должен использовать сортировку в порядке возрастания на основе идентификационного номера сотрудника. Я не уверен, какой вид использовать, и где его реализовать. Создать для него новый класс? Позвольте мне показать вам мой код тестера. У меня есть факультет/partime // персонал/учебные классы, все работают. Код из этих классов отображается в TestEmployee. Таким образом, любая помощь/советы ценится в том, как сортировать мои идентификационные номера.java - сортировать по возрастанию

import java.util.Calendar; 
import java.util.Scanner; 

public class TestEmployee implements EmployeeInfo{ 


     public static void main(String[] args) throws CloneNotSupportedException { 

     /** 
     * Part A: output all employee from Staff, Faculty, and partime. 
     */ 

     double sum=0,total=0; 

       Employee[]emp = new Employee[9]; 
       Calendar staffBirthDate = Calendar.getInstance(); 
       Calendar facultyBirthDate = Calendar.getInstance(); 
       Calendar partimeBirthDate = Calendar.getInstance(); 

       staffBirthDate.set(1959, 2, 23);// Scott Chan 
       emp[0] = new Staff("Chan, Scott", 123, 'M', staffBirthDate, 35.00); 

       staffBirthDate = Calendar.getInstance(); 

       staffBirthDate.set(1964, 7, 12);// Brian Salinas 
       emp[1] = new Staff("Salinas, Brian", 456, 'F', staffBirthDate, 30.00); 

       staffBirthDate = Calendar.getInstance(); 

       staffBirthDate.set(1970, 6, 2);// Allen Weir 
       emp[2] = new Staff("Weir, Allen", 789, 'M', staffBirthDate, 22.00); 

       facultyBirthDate = Calendar.getInstance(); 

       facultyBirthDate.set(1962, 4, 27); 
       emp[3] = new Faculty("Im, Lee", 243, 'F', facultyBirthDate, "Full", "PH.D", "Engineering", "3"); 

       facultyBirthDate = Calendar.getInstance(); 

       facultyBirthDate.set(1975, 3, 14);// 
       emp[4] = new Faculty("Bui, Thung", 791, 'F', facultyBirthDate, "Associate", "PH.D", "English", "1"); 

       facultyBirthDate = Calendar.getInstance(); 


       facultyBirthDate.set(1980, 5, 22);// 
       emp[5] = new Faculty("Monreno, Maria", 623, 'F', facultyBirthDate, "Assistant", "MS", "Physical Education", "0"); 

       partimeBirthDate = Calendar.getInstance(); 

       partimeBirthDate.set(1977, 8, 10); 
       emp[6] = new Partime("Lee, Chesong", 455, 'F', partimeBirthDate, 20, 35.00); 

       partimeBirthDate = Calendar.getInstance(); 


         partimeBirthDate.set(1987, 9, 15); 
       emp[7] = new Partime("Garcia, Frank", 678, 'M', partimeBirthDate, 25, 30.00); 

       partimeBirthDate = Calendar.getInstance(); 

         partimeBirthDate.set(1980, 8, 22);// 
       emp[8] = new Partime("Alquilo, Roscoe", 945, 'M', partimeBirthDate, 30, 20.00); 

       for(int i = 0; i<emp.length;i++) 
     { 
      if(emp[i] instanceof Staff) 
      { 
       System.out.println("\n"+emp[i]); 
      }//end of if statement 
      if(emp[i] instanceof Faculty) 
      { 
       System.out.println("\n"+emp[i]); 
      }//end of if statement 

     }// end of for loop 

       for(int i = 0; i<emp.length; i++) 
       { 
        sum = ((Employee) emp[i]).monthlyEarning()+sum; 
       } 
       System.out.println("\nTotal monthly salary for all Employees"); 

       System.out.println("$"+sum); 
       //c 
       System.out.println("\nTotal monthly salary for all faculuty"); 
       for(int i = 0; i<emp.length;i++) 
       { 
        if(emp[i] instanceof Faculty) 
        { 
         total = ((Employee) emp[i]).monthlyEarning()+total; 
        } 
       } 
       System.out.println("$"+total); 
       // Duplicate a faculty object. test the duplication 
       Faculty f1 = (Faculty)emp[4]; 
       Faculty f2 = (Faculty)f1.clone(); 
       Education dupl = new Education("PH.D", 
         "Doctor", "4"); 
       f2.setEducation(dupl); 
       System.out.println("\nD Duplicate a Faculty Object" 
         +"\n"+f2.toString()); 

       // Verify two staff objects are the same 

       System.out.println("\nE.Verify two staff objects "); 
       Staff s1 = (Staff)emp[6]; 
       Staff s2 = (Staff)s1.clone(); 
         staffBirthDate = Calendar.getInstance(); 

       Staff s3 = new Staff("Danger, Norman", 456, 'M', staffBirthDate, 25.00); 
       if(s1.getBirthdate()==s2.getBirthdate()) 
       { 
        System.out.print("\nThe two staff objects " + 
          " birthdays"+ " are the same " 
          +"therefore "+true+"\n"); 
       } 
       if(s3.getBirthdate()==s1.getBirthdate()) 
       { 
        System.out.print(true); 
       } 

       // Sort employees by ascending employee ID 
       System.out.println("\nSort employees by ID"); 


       { 
        System.out.println("\n"+emp[i]); 
       } 
     } 
} 
+0

Лично я просто использовал ['Arrays.sort'] (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html). Если вам нужно изменить способ работы сортировки, вы можете предоставить пользовательский 'Comparator' – MadProgrammer

+0

Хорошо, я рассмотрю Arrays.sort. Нет, я лично не хочу менять способ сортировки: P. – Christian

+0

'Arrays.sort' сортируется только в« естественном »направлении. Если вам нужно, например, отменить это, вы можете использовать «Компаратор». Если бы вы использовали «Список», вы могли бы использовать «Collections.sort» и «Collections.reverse» для достижения того же, но вам нужно было решить, что наилучшим образом соответствует вашим потребностям;) – MadProgrammer

ответ

2

Как правило, вы не реализуете этот вид. Вы должны использовать Arrays.sort (в вашем случае) или Collections.sort. Все, что вам нужно сделать, это предоставить Comparator, которые определяют порядок.

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html

+0

Хорошо, спасибо за ваш Ответить. Я собираюсь проверить ссылки для лучшего понимания. – Christian

0

Использование Java компаратор, или установить класс сопоставимыми. Затем используйте Arrays.sort()

Смотрите пример здесь: http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

+0

Хорошо, я закончил, и все, кажется, работает с использованием массива Array. Тем не менее, я изучу использование сопоставимых, а также, спасибо за ссылку на Fruit о сопоставимых (я получал ошибки и этот код класса, так как я хочу проверить, могу ли я спуститься из списка. Спасибо за вашу помощь peeps. – Christian

+0

нет проблем, хорошо знать. =) – JackDev

0
class MyComparator implements Comparator<Employee>{ 
     public int compare(Employee e1, Employee e2) { 
      return Integer.valueOf(e1.id).compareTo(e2.id); 
     } 
} 

MyComparator myComparator = new MyComparator(); 
Collections.sort(array, myComparator); 
+0

Preesh! Мне нужно будет прочитать о компараторе, так как кажется, что он может работать более эффективно, чем Arrays.sort – Christian

+0

Да, вы правы ..... взгляните на Comparable тоже ..... – Prabhakaran

0

Лучше воспользоваться Java отсортированных коллекций, как TreeSet, например:

 Collection<Employee> employList = new TreeSet<Employee>(
       new Comparator<Employee>() { 
        @Override 
        public int compare(Employee a, Employee b) { 
         int getBirthDate = a.getBirthDate() 
           .compareTo(b.getBirthDate()); 
         if (getBirthDate != 0) 
          return getBirthDate; 
         int getA = a.getA().compareTo(b.getA()); 
         if (getA != 0) 
          return getA; 
         return Long.valueOf(a.getB()).compareTo(Long.valueOf(b.getB())); 
        } 
       }); 
     employList.add(new Employee(...); 

Инициировать сбор первый. Затем начните добавлять объекты Employee. Они будут автоматически отсортированы по полям BirthDate, а затем A и B объекта Employee. Вы можете добавить столько, сколько хотите, или удалить A и быть частью, а просто вернуть a.getBirthdate(). CompareTo (b.getBirthdate()); если вам нужна только дата рождения.

0

Интересно, почему никто уже не упомянул Comparator.natural(). Reverse().

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