2016-07-12 12 views
0

私はオブジェクトの配列をファーストネームで並べ替えるメソッドを持っています。しかし、私はオブジェクトの元の順序を印刷したいとき、ソートされたバージョンを印刷します。これを修正するために私は何を変えることができますか?オブジェクトの配列を並べ替える

Mainメソッド+他の方法

String[] firstNames= {"Fred","John","Amir", "James","Bob","Jay","Amber"}; 
String[] lastNames = {"Bond","Kates","Memar", "White","Marley","Brown","Nogofski"}; 
String[] idNumbers = {"R111111","A222222","AB11111", "KR22121","V311133","L242434","P102432"}; 
String[] employeeNum = {"1111","2222","3333", "4444","5555","6666","7777"}; 

Employee[] list = new Employee[firstNames.length]; 
list = listOfEmployees(firstNames,lastNames,idNumbers); // create the list of employees in one array  
System.out.println("List of employees before sorting...\n"); 
printEmployeeList(list); //print the list of employees 
sortWithFirstName(list); 
printEmployeeList(list); 


public static void printEmployeeList(Employee[] list){ 
    String employees = Arrays.toString(list).replace("[", "").replace("]", "").replace(",", ""); 
    System.out.println(employees); 
    } 

public static Employee[] sortWithFirstName(Employee[] list){ 
    System.out.println("Sorting the list with the first name"); 
    { 
boolean swap; 
//String temp; //change this too 
do 
{ 
    swap = false; 
    for (int i = 0; i < (list.length - 1); i++) 
{ 
    if (list[i].getFirstName().compareTo(list[i+1].getFirstName()) > 0) //if first number is greater then second then swap 
    { 
     //swap 

     Employee temp = list[i]; 
     list[i] = list[i + 1]; 
     list[i + 1] = temp; 
     swap = true; 
    } 
} 

} while (swap == true); 
printEmployeeList(list); 
} 
return list; 
} 

public static class Employee{ 
    private String firstName; 
    private String lastName; 
    private String idNumber; 
    private String employeeNumber; 
    private int employeeCount; 

    /** 
    * Constructor 
    * @param firstName first name 
    * @param lastName last name 
    * @param idNumber id number 
    */ 
    public Employee(String firstName, String lastName, String idNumber){ 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.idNumber = idNumber; 
     employeeCount = 0; 
    } 
    /** 
    * Accessors here 
    */ 

    public String getFirstName(){ 
     return firstName; 
    } 

    public String getLastName(){ 
     return lastName; 
    } 

    public String getIdNumber(){ 
     return idNumber; 
    } 

    public String getEmployeeNumber(){ 
     return employeeNumber; 
    } 

    // mutators here 

    /** 
    * @param firstName first name 
    */ 
    public void setFirstName(String firstName){ 
     this.firstName = firstName; 
    } 

    /** 
    * @param lastName last name 
    */ 
    public void setLastName(String lastName){ 
     this.lastName = lastName; 
    } 

    /** 
    * @param idNumber id number 
    */ 
    public void setIdNumber(String idNumber){ 
     this.idNumber = idNumber; 
    } 

    /** 
    * @param employeeNumber employee number 
    */ 
    public void setEmployeeNumber(String employeeNumber){ 
     this.employeeNumber = ""; 
    } 
    @Override 
    public String toString(){ 
     String result = "\nFirst name: " + getFirstName() + "\nLast name: " + getLastName() 
       + "\nId number: " + getIdNumber() + "\nEmployee number: "; 
     if(getEmployeeNumber() == null){ 
     return result + "No employee number has been assigned yet!\n"; 
    } 
     return result + getEmployeeNumber() + "\n"; 
    } 

} 
+1

ソート方法で従業員リストのローカルコピーを作成し、元のリストの代わりにそのローカルコピーをソート(および返す)します。 – Pshemo

+0

元の注文をここで再印刷しようとしていますか? 'printEmployeeList(list); //従業員のリストを出力する sortWithFirstName(list); printEmployeeList(リスト); '?もしそうなら、リスト配列の構造を並べ替えると、元の順序をなぜ再印刷するのでしょうか? –

+0

@ J.Scheiので、配列のコピーをsortメソッド内に作成しますか? 'Employee [] copied = Arrays.copyOf(list、list.length)'のようなものですか? – Deescomaster

答えて

0

元の注文を印刷してから、リスト変数を並べ替えます。リストをもう一度印刷すると、同じ変数なので並べ替えられます。

printEmployeeList(list); //print the list of employees 
sortWithFirstName(list); 
printEmployeeList(list); 

あなたは(例えば。listArranged)元のリストのコピーを作成して、代わりにその1を再編成する必要があるあなたが元のリストを印刷したい場合は、最初にlist変数にアクセスすることができます。

0

は、私はあなたがそれをしない元の配列をソートするときに、新しい配列intanceを作成する必要があると思うEmployeeクラスその中に直接挿入しますが、新しいインスタンスを使用してください。オリジナルに戻ると、元の配列からソートコピーを作成するのと同じように、

関連する問題