![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Rauko |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
есть задача:
программа должна обрабатывать определенный массив данных(имена-фамилии, зарплаты, идентификационный номер). через интерфейсы реализовать сортировки по фамилии, зарплате, номеру в базе данных написала классы, описывающих моих тружеников в базе, все загружается-выгружается как часы... собственно вопрос - как правильно использовать для этой задачи интерфейс Comparable? эклипс предлагает такую конструкцию, но как ее правильно вкурить - не понимаю...
собственно, как сравнить по определенному полю класса(через геттер)? данные имеют типы: salary - double name - String INN - int как все это дело правильно обработать? __________________________ дополнительно вопрос по эклипсу - почему может быть проблема с псевдографикой? в коде имею одно, в консоле - другое... код:
консоль:
как его поправить? чем может быть вызвано? раньше нормально отрисовывал таблички..... Это сообщение отредактировал(а) Rauko - 16.8.2015, 18:44 |
||||||
|
|||||||
| AntonSaburov |
|
||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Comparable позволяет сделать объекты одного класса сравнимыми (через интерфейс Comparable) - compareTo возвращает
> 0 - текущий объект больше, чем тот, который передали = 0 - объекты равны < 0 - переданный объект больше. Лучше сделать описание класса для сравнения типизированным (с Generic)
Тогда будет так
Ну а как сравнивать - тут самому надо решать. Если только по фамилии, то тогда name.compareTo(obj.name) |
||||
|
|||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
в общем, у меня получилось только с даблом решить:
подскажите, как решить сортировку с INN и secondName? не могу разобраться, как задать критерий сравнения... Это сообщение отредактировал(а) Rauko - 17.8.2015, 11:30 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Так надо критерий сделать по всем трем полям ? Или надо сделать так, чтобы можно было выбирать, по какому полю делать сортировку ?
|
|||
|
||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
у меня это решено через выбор в меню варианта сравнения:
задача подразумевает вызов нужного метода для нужной сортировки базы данных в 10 элементов (Employee[] dataBase) разных классов(дочерние классы Employee c разницей в вычислении некоторых полей и несколькими различающимися константными переменными). мне показалось, что будет удобней вызывать через менюшку нужное условие, по факту ограничений в задаче не было единственное, с чем у меня проблема - это собственно сортировка... не могу понять, как ее выполнять(до коллекций пока еще не дошли в изучении, пока был только Comparable Comparator) в каждом из используемых классов есть поля: - Name(2 отдельные переменные типа String); - Salary(3 переменные типа double: сама зп, бонус в численном виде в зависимости от %, полная зп); - INN(int, номер регистрации в системе); - куча других параметров, которые не относятся к данной задаче. сложность заключается в том, что я упорно не пойму, как менять поле, по которому выполнять сортировку... Это сообщение отредактировал(а) Rauko - 17.8.2015, 13:13 |
|||
|
||||
| AntonSaburov |
|
||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
А точно надо сортировать через Comparable ? Просто он унжен тогда, когда используется коллекция. Если сортировать надо самому, то нафига он вообще нужен.
Если же используются коллекции, то может тогда лучше использовать интерфейс Comparator в котором реализовать compare(Object obj1, Object obj2) Сделать что-то подобное такому
И использовать так:
|
||||
|
|||||
| Rauko |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
ну, это тема перед коллекциями...
перенесла меню в класс, отвечающий за вывод на экран... ругается, однако
в частности, компилятору не нравится вот это место:
причина: Оператор > не определен для типов параметров java.lang.String, java.lang.String на INN не ругается... коллекцию не использовала, не по теме финт ушами Это сообщение отредактировал(а) Rauko - 17.8.2015, 16:05 |
||||
|
|||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Класс String является Comparable - используйте
И на будущее - для объектов не определены операции >, <, >=, <=. Там можно сравнить ссылки, но это не сравнение объектов, а сравнение ссылок - == или !=. |
|||
|
||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
да, большое спс, заработало )
теперь буду делать дз с коллекциями...(переписать прогу под коллекции) |
|||
|
||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
такс, пришел ответ от преподавателя - задача решена не верно
в этой задаче не должен использоваться switch вопрос - как тогда реализуется эта задача без свича? (именно момент с несколькими вариантами compare) а так же - почему нельзя использовать вместе Comparable <> и Comparator <>:
Это сообщение отредактировал(а) Rauko - 23.8.2015, 18:15 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Как я понимаю, нужно сделать задачу в которой есть массив (не коллекция, а массив) объектов класса Employee, который реализует интерфейс Comparable.
Нужно написать функцию, которая что делает ? Сравнивает Employee по группе полей как бы "одним куском" (т.е. в сравнении сразу частвуют все поля) или нужно иметь возможность выбирать по какому полю сравнивать ? Для первого случая надо сделать одно, для второго - другое Comparable позволяет получить ответ какой из двух объектов "больше" (или "меньше"). В общем можно сравнивать объекты в массиве через compareTo ну и дальше их сортровать. Но точной формулировки задачи я не увидел, а придумывать ща Вас как-то не хочется. Вы уж постарайтесь ТОЧНО сформулировать, что надо. |
|||
|
||||
| Rauko |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 22.6.2009 Репутация: нет Всего: нет |
да, речь идет именно о массиве(!) элементов Employee, не коллекции
использовать интерфейс Comparable для трех разных запросов (получить сортировку по int INN, String фамилии, double зарплате) не использовать switch как показано ниже:
вроде как то так... ну и почему нельзя использовать вместе Comparable <> и Comparator <>? |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Ну видимо Ваш преподаватель имеет свои планы.
Comparator требует работы с коллекцией. Comparable в принципе не требует - можн онаписать свой метод сортировки, который будет использовать compareTo для сравнения объектов и дальнейшего их перемещения в нужные места массива. Например, для метода сравнения "пузырьком" надо сравнивать два соседних жлемента и менять их местами, если первый больше второго и сортировка от меньшего к большему. Но тут закавыка в том, что тогда сам класс Employee должен иметь какой-то признак, который позволит одному объекту сравниваться с другим объектом по разным полям. Забавно то, что в этом случае switch как раз неплохо будет подходить. Но можнро обойтись конечно же и без него. И если честно - не ждите от меня готового решения - я могу подсказать, но делать за Вас рабту не буду - учитесь своей головой думать. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |