Настраиваемая сортировка массива объектов в Java, которая не сортируется

1

Я прочитал несколько руководств по настройке массивов Array.sort и множество поисковых запросов, но мне не хватает ответа. Сейчас Arrays.sort(charList) ничего не делает. Вот как выглядит мой код.

public class character implements Comparable<character>{

//public vars
public String charName;
public int initModifier;
public int initRoll;
public int secondInit;
/* ... getters, setters, other vars .. */
    @Override
    public int compareTo(character another) {
        int compareInit = ((character) another).getTotalInit();
        int comp = this.totalInit - compareInit;
        int compareSecondInit = ((character) another).getTotalInit();

        if (comp != 0)
        {
            return comp;
        }
        else
        {
            return this.secondInit - compareSecondInit;
        }
    }
}

Основная деятельность - это совокупность вещей. Часть, которая касается массивов. Сорт:

//add a character to the array.
public void addResults(character c)
{
    debugInt++; //using this to debug
    if(debugInt==3)
    {
        Log.d(tag,charList[0].charName); //always prints the first object entered
        Log.d(tag,charList[1].charName); //always prints the second object entered
    }
    if (playersPerTurn<charLimit)
    {
        charList[playersPerTurn]=c;
        Arrays.sort(charList,0,playersPerTurn); 
        playersPerTurn++;
        updateDisplay();
    }
}

Помоги мне ТАК, ты моя единственная надежда.

  • 0
    Вы пробовали протестировать compareTo() , создав несколько character и распечатав результат их сравнения?
  • 0
    Спасибо за идею. Данные, которые я загружал, не дали бы мне ответа, но я не рассматривал этот тест.
Теги:
sorting

1 ответ

2
Лучший ответ
int compareSecondInit = ((character) another).getTotalInit();

Вы, наверное, хотели getSecondInit() здесь.
Ваш compareTo() с этой ошибкой не согласован - и, следовательно, результат не определен.

например:

element1:
totalInit = 1
secondInit = 2
element2:
totalInit = 1
secondInit = 2

element1.compareTo(element2) == 2 - 1 == 1
element2.compareTo(element1) == 2 - 1 == 1

В качестве дополнительной заметки о практике кодирования:

  1. Именование character класса сбивает с толку, вам следует переименовать его.
  2. В java соглашение состоит в том, что имена классов начинаются с букв верхнего регистра. Это поможет коллегам-программистам легко понять, что character - это класс, а не поле.
  • 0
    Я не могу поверить, что провел три часа, не видя этого. Спасибо, спасибо.
  • 0
    Добро пожаловать @Hiverzz. Рад, что смог помочь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню