Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Comparator, Сравнение объектов 
:(
    Опции темы
JustTipCs
  Дата 16.2.2014, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.2.2014
Где: Украина, Киев

Репутация: нет
Всего: нет



Добрый день. Есть задачка. Есть класс А, в котором описываются животные и два его наследника В (львы) и С (пантеры). У класса А есть абстрактный метод который рассчитывает, сколько съедает каждое животное (этот метод переопределяется в классах В и С ).  
В этой задаче нужно упорядочить животных по убыванию количества съеденного ими мяса, а при совпадении этого количества упорядочить этих животных по алфавиту. В конце нужно вывести идентификатор животного, его имя и кол-во съеденного им мяса.
 Для этого я использую массив, который затем помещаю в TreeMap, но проблема в том, что при сравнении кол-ва мяса я реализую интерфейс Comparator и проблема заключается в том, что в методе compare сравниваются объекты одного типа, а я вынужден сравнивать объект класса В и объект класса С (класс А абстрактный, т.к. он содержит абстрактный метод). Подскажите пожалуйста, выход из ситуации. 
PM Skype   Вверх
cube
Дата 16.2.2014, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 2
Всего: 3



А зачем вам вообще TreeMap? почему не TreeSet? в их работе разницы никакой нет, оба деревья, только мар использует key/value. Но это без разницы если честно.

Код

public abstract class A implements Comparable<A>
.......................

public abstract int getMeat(); //сколько съедает
.......................
@Override
public int compareTo(A a)
{
            int value = a.getMeat()-this.getMeat(); // по убыванию количества съеденного (поменяете местами получите по возрастанию)
            if (value==0) return this.name.compareTo(a.getName()); // если количество одинаковое сортируете по именам
            return value; 
}



все остальное у вас наверно есть

Код

TreeSet<A> animals = new TreeSet();
animals.add(...);
animals.add(...);
....................

Iterator<A> i = animals.iterator();
while(i.hasNext())
{
           A a = i.next(); // в сортированном виде 
}


С Comparator и List должно быть что-то такое))

Код


public static Comparator<A> myComparator = new Comparator<A>() {
             @Override
        public int compare(A a1, A a2) {
                int value = a2.getMeat()-a1.getMeat();
                if (value==0) return a1.getName().compareTo(a2.getName());
                return value;
        }
 };

ArrayList<A> animals....
animals.add(....);
animals.add(....);

Collections.sort(list, myComparator);
 for(A a:list) a.........// в сортированном виде



Это сообщение отредактировал(а) cube - 17.2.2014, 00:56
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.