Применение сортировки вставки к массивам объектов - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь применить сортировку вставками к массиву объектов, но моя команда else если никогда не скомпилирует и говорит "типы неверных операндов".

Просто интересно, нужно ли мне создать очень специфический метод compareToили если есть лучший способ сравнения массивов объектов в методе сортировки вставкой.

РЕДАКТИРОВАТЬ:

Итак, вот я пытаюсь использовать мой метод compareTo, и он компилируется, но я получаю null pointer exception на else if.Почему?

public static void insertElement(WordClass[] Words, int next)
{
    WordClass value = Words[next];
    int i = next;

    while(true)
    {
        //
        if(i == 0)
        {
            Words[0] = value;
            break;
        }

        else if(Words[i-1].getStr().compareTo(value.getStr()) <= 0)
        {
            Words[i] = value;
            break;
        }
        else
        {
            Words[i] = Words[i-1];
            i--;
        }
    }
}


public static void insertionSort(WordClass[] Words)
{
    for(int i = 1; i< Words.length; i++)
    {
        insertElement(Words, i);
    }
}

     //in WordClass
     public int compareTo(WordClass w) //makes WordClass comparable
{
    return getStr().compareTo(w.getStr()); 

}

1 Ответ

0 голосов
/ 27 мая 2018

Вы должны всегда использовать операторы campareTo вместо == или <= для типов объектов, если только вы не хотите использовать две переменные объекта, чтобы посмотреть, относится ли оба к одному и тому же объекту.Также ваш класс WordClass должен реализовывать интерфейс Camparable, чтобы это работало.

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