Java 按字母顺序对数组排序

Java 按字母顺序对数组排序,java,arrays,sorting,Java,Arrays,Sorting,我正在尝试对数组进行排序。我必须在新数据进入数组时使用数组。不要添加所有元素,然后进行排序。我的排序算法不能正常工作。 它只返回重复多次的3个条目,而不是返回排序数组 这就是我试图添加到阵列中的内容: arrayDirectory.addEntry("Smith RK 005598"); arrayDirectory.addEntry("Alal KA 004567"); arrayDirectory.addEntry("Bors OB 005678");

我正在尝试对数组进行排序。我必须在新数据进入数组时使用数组。不要添加所有元素,然后进行排序。我的排序算法不能正常工作。 它只返回重复多次的3个条目,而不是返回排序数组

这就是我试图添加到阵列中的内容:

    arrayDirectory.addEntry("Smith  RK  005598");
    arrayDirectory.addEntry("Alal KA  004567");
    arrayDirectory.addEntry("Bors OB  005678");
    arrayDirectory.addEntry("Zaaa   NZ  001234");
    arrayDirectory.addEntry("Zoll  NZ  001254");
    arrayDirectory.addEntry("Ola    KO  001245");
这就是它的回报:

------PHONE DIRECTORY AS OF WED MAR 27 15:29:52 GMT 2019------
SURNAME: BORS INITIALS: OB NUMBER: 005678 
SURNAME: BORS INITIALS: OB NUMBER: 005678 
SURNAME: BORS INITIALS: OB NUMBER: 005678 
SURNAME: BORS INITIALS: OB NUMBER: 005678 
SURNAME: BORS INITIALS: OB NUMBER: 005678 
SURNAME: SMITH INITIALS: RK NUMBER: 005598 
SURNAME: SMITH INITIALS: RK NUMBER: 005598 
SURNAME: SMITH INITIALS: RK NUMBER: 005598 
SURNAME: SMITH INITIALS: RK NUMBER: 005598 
SURNAME: SMITH INITIALS: RK NUMBER: 005598 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
SURNAME: ZOLL INITIALS: NZ NUMBER: 001254 
有什么问题

这是我的加法:

@Override
    public void addEntry(String line) {
        String[] newLine = line.split("\\s+");
        String surname, initial, number;
        if (newLine.length == 3) {
            surname = newLine[0];
            initial = newLine[1];
            number = newLine[2];

        } else {
            throw new IllegalArgumentException("Please fill all the required fields, [surname,initials,number]");
        }

        if (count == entries.length) {
            Entry[] tempEntries = new Entry[2 * count];
            System.arraycopy(entries, 0, tempEntries, 0, count);
            entries = tempEntries;


        } else {
            Entry entry = new Entry(surname, initial, number);


            for (int i = 0; i < entries.length; i++) {
                for (int j = i + 1; j < entries.length; j++)
                if (entries[j]!=null){
                    String one = entries[j].getSurname();
                    if (surname.compareToIgnoreCase(one) > 0) {
                        Entry temp = entries[i];
                        entries[i] = entries[j];
                        entries[j] = temp;
                    }
                }
                else {
                    entries[count]=entry;
                    count++;
                }
            }

        }
    }
这是我的打印方法:

public void printEntries()throws NullPointerException{
    Date date=new Date();

    System.out.println("------PHONE DIRECTORY AS OF "+date.toString().toUpperCase()+"------");

    for(int i=0;i<entries.length;i++){
    if(entries[i].getSurname()==null){
    throw new NullPointerException("------END OF DIRECTORY------");
    }else{
    System.out.printf("SURNAME: %S INITIALS: %S NUMBER: %s %n",entries[i].getSurname(),entries[i].getInitial(),entries[i].getNumber());
    }
    }
    }

任何帮助都将不胜感激

当if count==entries.length{为true时,您只是增加数组的大小,而不是插入任何元素。您应该在这两种情况下都插入元素。另外,在else子句中,您要多次添加元素。if entries[j]!=null{将多次返回false,您将一次又一次地添加元素。

请将输出作为代码而不是图像链接添加尝试在调试器中单步执行代码,或使用笔/cil和纸玩计算机并尝试解决它。您是否考虑过使用类似ArrayList的列表而不是数组?这应该非常有用您可以使用Collections.sort方法尝试使用树集而不是数组,我知道数组是非常有效的数据结构,但是如果已经有一个合适的数据结构可以完全满足您的需要,请避免执行这些琐碎的任务。@Bargros我必须使用数组。我不明白我应该在else子句中更改什么,可以吗进一步解释?或举例说明?