2016-07-12 132 views
0

我有一个方法,通过名字排列对象的数组打印出来罚款。但是,当我想打印对象的原始顺序时,它仍然打印出排序的版本。我可以改变什么来解决这个问题?排序对象数组

主要方法+其他方法

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; 
} 

Employee类

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(list);'?如果是这样,那么如果你重新安排了你的列表数组的结构,为什么它会重新打印原来的订单呢? –

+0

@ J.Schei所以在排序方法里面做一个数组的副本?像'Employee [] copied = Arrays.copyOf(list,list.length)''? – Deescomaster

回答

0

在这里打印原始订单,然后重新排列列表变量。如果再次打印列表,它将被重新排列,因为它是相同的变量。

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

您需要创建原始列表的副本,并重新安排一个代替(如listArranged),然后如果你要打印你可以访问第一list变量的原始列表。

0

我认为你需要创建一个新的数组intance当你排序原始数组不这样做直接在它中,但使用新的实例,所以当你回到原来的时候,你会发现它像 之前,这就像创建从原始数组的排序副本