簡體   English   中英

排序對象數組

[英]sorting an array of objects

我有一個方法可以按名字對對象數組進行排序,可以很好地打印出來。 但是,當我要打印對象的原始順序時,它仍然會打印出已排序的版本。 我可以更改以解決此問題嗎?

主要方法+其他方法

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

}

我認為當您對原始數組進行排序時,您需要創建一個新的數組實例,而不是直接在其中進行操作,而是使用新實例,因此當您返回原始數組時,您會發現它就像創建一個排序之前一樣從原始數組復制

在這里,您將打印原始訂單,然后重新排列列表變量。 如果再次打印該列表,因為它是相同的變量,它將被重新排列。

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

您需要創建原始列表的副本,然后重新排列該副本(例如listArranged),然后,如果要打印原始列表,則可以訪問第一個list變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM