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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка в java, сортировка в java 
V
    Опции темы
larinva
Дата 25.7.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый вечер! вопрос по сортировке имеется 2 метода
Код

 getName(){
       return name; 
}
 и 
Код

getSum() {
       return sum;
}
 вывожу в консоль
Код

System.out.println("Имя " + getName + "\t" + "Сумма: " + getSum()); 

Вопрос как можно реализовать сортировку по getSum
PM MAIL   Вверх
AntonSaburov
Дата 25.7.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



А что сортировать ? Список, массив ? Тут экстрасенсов нет.

А вообще - смотрим интерфейсы Comparable и Comparator а также метод Collections.sort
PM MAIL WWW ICQ   Вверх
Stolzen
Дата 25.7.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Использовать компаратор:

Код

Collections.sort(list, new Comparator<SomeObject>() {
    @Override
    public int compare(SomeObject o1, SomeObject o2) {
        return o1.getSum().compareTo(o2.getSum());
    }
        
});



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Christoph
Дата 25.7.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не понятно что возвращают методы
кинуть в TreeMap и вывести на экран
если методы возращают строку

Это сообщение отредактировал(а) Christoph - 25.7.2011, 16:44


--------------------
user posted image
PM MAIL ICQ   Вверх
larinva
Дата 25.7.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Christoph первый метод возвращает String второй Double
PM MAIL   Вверх
AntonSaburov
Дата 25.7.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Э-э-э-э. Так что на счет объекта сортировки ? Что сортируем ?
PM MAIL WWW ICQ   Вверх
larinva
Дата 26.7.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал вот так 
Код

@Override
        public int compare(Employee e1, Employee e2) {
            return (int) e1.result - (int) e2.result;
        }


Код

void display(){
            List<Employee> list = new ArrayList<Employee>();
            list.add(new Employee(result));
            Collections.sort(list, new Employee()); {
            for (Employee e: list){
                System.out.println("\t" + e.result);
            }
          }


Результат не сортируется.
Результат вы вода
        7150.0
    4000.0
    1700.0
    2550.0
    3550.0
что не так делаю? smile 
PM MAIL   Вверх
nc30
Дата 26.7.2011, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


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

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



larinva
Вы уже второй раз приводите код, который не будет компилироваться. В первый раз были методы без указания возвращаемых типов. Теперь эти методы исчезли, появился новый метод display() с локальной переменной result, которая нигде не инициализируется. 
Цитата

Вопрос как можно реализовать сортировку по getSum 
 Этот вопрос отпал? Или что?

Давайте будем уважительно относиться к участникам форума. Сформулируйте четко вашу задачу и выложите код в необходимом и достаточном количестве, который у вас компилировался и не работал так как вам нужно. Если хотите чтобы вам помогли, не заставляйте вытягивать из вас информацию клещами.
PM MAIL   Вверх
Stolzen
Дата 26.7.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Employee передавать в качестве компаратора?  smile 

Код

Collections.sort(list, new Comparator<Employee>() {
    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getSum().compareTo(o2.getSum());
    }
});



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
larinva
Дата 26.7.2011, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



nc30тогда вот
конструктор 
Код

 Employee(String name, Double result){
            this.name = name;
            this.result = result;            
        }

Код

// метод записи имени
    void setName(String name){
        this.name = name;
        }


Код

// метод возвращает имя
    String getName(){
        return name;
        }

// метод записывает сумму
 void setSum(Double result){
            this.result = result;
        }
Код

// метод возвращает сумму
   Double getSum(){
            return result;
        }       

Код

// переопределенный компаратор
@Override
        public int compare(Employee e1, Employee e2) {
            return (int) (e1.getSum() - e2.getSum());
        }


Код

//метод выводит на экран результат
    void display(){
            List<Employee> list = new ArrayList<Employee>();
            list.add(new Employee(getName(), getSum()));
            Collections.sort(list, new Employee()); {
            for (Employee e: list){
                System.out.println("Имя: " + getName() + "\t" + e.getSum());
            }
            //System.out.println(list.toString());
            }
        }

Нужно чтобы результат от сортировался по getSum()


Это сообщение отредактировал(а) larinva - 26.7.2011, 11:17
PM MAIL   Вверх
AntonSaburov
Дата 26.7.2011, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



То, что Вас просили - это должен быть полный пример, а не куски из кода. Он у Вас не такой уж большой.

И например это - работает

Код

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {

    public static void main(String[] arg) {
        List<Employee> list = new ArrayList<Employee>();
        list.add(new Employee("3", 300.00));
        list.add(new Employee("6", 600.00));
        list.add(new Employee("1", 100.00));
        list.add(new Employee("5", 500.00));
        list.add(new Employee("4", 400.00));
        list.add(new Employee("2", 200.00));

        System.out.println("Before sort");
        for (Employee e : list) {
            System.out.println(e);
        }

        Collections.sort(list, new EmployeeComparator());

        System.out.println();
        System.out.println("After sort");
        for (Employee e : list) {
            System.out.println(e);
        }

    }
}

class Employee {

    private String name;
    private Double result;

    public Employee(String name, Double result) {
        this.name = name;
        this.result = result;
    }

    void setName(String name) {
        this.name = name;
    }

    String getName() {
        return name;
    }

    void setSum(Double result) {
        this.result = result;
    }

    Double getSum() {
        return result;
    }

    @Override
    public String toString() {
        return "Employee{" + "name=" + name + ", result=" + result + '}';
    }
}

class EmployeeComparator implements Comparator<Employee> {

    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getSum().intValue() - o2.getSum().intValue();
    }
}

PM MAIL WWW ICQ   Вверх
larinva
Дата 26.7.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а вот почему то если заменить
 
Код

list.add(new Employee("3", 300.00));

на
Код

list.add(new Employee(getName(), getSum()));

то не сортирует
PM MAIL   Вверх
Christoph
Дата 27.7.2011, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



показывайте полный код smile


--------------------
user posted image
PM MAIL ICQ   Вверх
larinva
Дата 27.7.2011, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Christoph
Код

package employee;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Employee implements Comparator<Employee> {

    public Employee() {
    }
     
    private String name;
        
    protected double result;
        
        Employee(String name, Double result){
            this.name = name;
            this.result = result;            
        }
    
    // метод записи имени
    void setName(String name){
        this.name = name;
        }
    // метод возвращает имя
    String getName(){
        return name;
        }
        
        void setSum(Double result){
            this.result = result;
        }
        
        Double getSum(){
            return result;
        }

        @Override
        public int compare(Employee e1, Employee e2) {
            return (int) (e1.getSum() - e2.getSum());
        }

        void display(){
            List<Employee> list = new ArrayList<Employee>();
            list.add(new Employee(getName(), getSum()));
            Collections.sort(list, new Employee()); {
            for (Employee e: list){
                System.out.println("Имя: " + e.getName() + "\t" + e.getSum());
            }
           }
        }
        
        
    public static void main(String[] args) {
            
            Employee empl = new Employee();
            empl.setName("Vika");
            empl.setSum(58.3);
            empl.display();
            
            Employee emp2 = new Employee();
            empl.setName("Sasha");
            empl.setSum(68.3);
            empl.display();
  
            Employee emp3 = new Employee();
            empl.setName("Ivan");
            empl.setSum(53.2);
            empl.display();
         }
}

PM MAIL   Вверх
Stolzen
Дата 27.7.2011, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Как все необычно. 
Я вам уже два раза решение написал.

Код

package collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Sort {
    public static void main(String[] args) {
        List<Employee> list = new ArrayList<Employee>();

        Employee empl = new Employee();
        empl.setName("Vika");
        empl.setSum(58.3);

        list.add(empl);

        Employee emp2 = new Employee();
        emp2.setName("Sasha");
        emp2.setSum(68.3);

        list.add(emp2);

        Employee emp3 = new Employee();
        emp3.setName("Ivan");
        emp3.setSum(53.2);

        list.add(emp3);

        Collections.sort(list, new Comparator<Employee>() {
            @Override
            public int compare(Employee o1, Employee o2) {
                return o1.getSum().compareTo(o2.getSum());
            }
        });

        for (Employee e : list) {
            System.out.println("Имя: " + e.getName() + "\t" + e.getSum());
        }

    }

}

class Employee {
    public Employee() {
    }

    private String name;

    protected double result;

    Employee(String name, Double result) {
        this.name = name;
        this.result = result;
    }

    void setName(String name) {
        this.name = name;
    }

    String getName() {
        return name;
    }

    void setSum(Double result) {
        this.result = result;
    }

    Double getSum() {
        return result;
    }

}



Это сообщение отредактировал(а) Stolzen - 27.7.2011, 09:27


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

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

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


 




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


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

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