Сортировать массивы по алфавиту - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь отсортировать массив (я должен использовать массивы), когда новые данные входят в массив (не добавить все элементы, а затем отсортировать).Мой алгоритм сортировки работает некорректно.Вместо того, чтобы возвращать отсортированный массив, он возвращает только 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 

В чем проблема?

Это мой метод addEntry:

@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());
    }
    }
    }

любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 27 марта 2019

Когда if (count == entries.length) { равно true, вы просто увеличиваете размер массива, но не вставляете никаких элементов.Вы должны вставить элемент в обоих случаях.Также в предложении else вы добавляете элемент несколько раз.if (entries[j]!=null){ будет возвращать false несколько раз, и вы в конечном итоге добавите элемент снова и снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...