0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 20
1

Как отсортировать массив элементов некоторого класса в java по одному полю используя sort?

30.08.2015, 15:59. Показов 1319. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые участники форума!
Возник такой вопрос:
Как отсортировать массив элементов некоторого класса в java по одному полю используя sort?
Есть класс individual, нужно отсортировать по полю importance. Нашел в интернете, что нужно определить компаратор compareTo, но при запуске возникает ошибка в месте вызова ф-ии sort.


Java
1
2
3
4
5
6
7
8
9
10
11
public static class individual {
        static int importance;
        static int field[][][] = new int[MAX_SIZE_OF_FIELD][MAX_SIZE_OF_FIELD][3];
        
        public int compareTo(individual  obj) {
            individual tmp = obj;
            if (this.importance < tmp.importance) return -1;
            if (this.importance > tmp.importance) return 1;
            return 0;  
        }
    };
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2015, 15:59
Ответы с готовыми решениями:

Отсортировать массив структур по одному полю
Само задание: &quot;Учитывая информацию из лицензий, выданных на приобретение оружия для охоты: Ф.И.О.,...

Программа содержит два класса. Оба класса содержат по одному целому полю и по одному указателю на символьный тип.
Помогите решить с объяснениями. Программа содержит два класса. Оба класса содержат по одному...

Отсортировать массив методами Bubble Sort, Selection Sort и Insertion Sort
Дан одномерный массив из 10 целых чисел. Заполните массив автоматически случайными числами...

Как отсортировать данный массив по возрастанию и убыванию. (buble sort)
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; void fillArray (const int SIZE,int...

6
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,671
30.08.2015, 16:06 2
Цитата Сообщение от oldoldspice Посмотреть сообщение
но при запуске возникает ошибка в месте вызова ф-ии sort.
текст ошибки покрыт тайной во мраке?
0
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 20
30.08.2015, 16:11  [ТС] 3
Добавлено через 28 секунд
Java
1
2
3
4
5
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:316)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:198)
    at java.util.Arrays.sort(Arrays.java:1246)
    at turn.on.the.light.TurnOnTheLight.solve(TurnOnTheLight.java:155)
    at turn.on.the.light.TurnOnTheLight.main(TurnOnTheLight.java:166)
Добавлено через 2 минуты
deleted link

Вот весь код

 Комментарий модератора 
5.19 Запрещено создавать темы в виде ссылок на задания или коды программ, расположенные на других сайтах.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,671
30.08.2015, 16:51 4
oldoldspice, это не весь трейс. Тут нет вашей ошибки
0
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 20
30.08.2015, 18:10  [ТС] 5
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
package turn.on.the.light;
 
import java.util.*;
 
public class TurnOnTheLight {
    static int size_of_field = 0;
    final static int MAX_SIZE_OF_FIELD = 10;
    final static int MAX_SIZE_OF_POPULATION = 1000;
    final static int MAX_NUMBER_OF_GENERATIONS = 1000;
    
    public static class individual {
        public static int importance;
        public static int field[][][] = new int[MAX_SIZE_OF_FIELD][MAX_SIZE_OF_FIELD][3];
        
        public int compareTo(individual  obj) {
            individual tmp = obj;
            if (this.importance < tmp.importance) return -1;
            if (this.importance > tmp.importance) return 1;
            return 0;  
        }
    };
    static individual population[] = new individual[MAX_SIZE_OF_POPULATION];
   
    static Scanner sc = new Scanner(System.in);
    
    static char types[] = new char[4];
    static boolean directions[][][] = {
        {
            {false, true, true, true},
            {true, true, true, false},
            {true, false, true, true},
            {true, true, false, true}
        },    
        {    
            {false, true, true, false},
            {true, false, true, false},
            {true, false, false, true},
            {false, true, false, true}
        },
        {
            {false, false, true, false},
            {true, false, false, false},
            {false, false, false, true},
            {false, true, false, false}
        },
        {
            {false, false, true, true},
            {true, true, false, false},
            {false, false, true, true},
            {true, true, false, false}
        }
    };
 
    static void init_types_of_pipes() {
        types[0] = 'T';
        types[1] = 'L';
        types[2] = 'H';
        types[3] = 'I';
    }
    
    static int recognize_type_of_pipe(char c) {
        for (int t = 0; t < 4; t++) {
            if (types[t] == c) return t;
        }
        return -1;
    }
    
    static int input() {
        size_of_field = sc.nextInt();
        String str = sc.nextLine();
        for (int i = 0; i < size_of_field; i++) {
            str = sc.nextLine();
            for (int j = 0, pos = 0; pos < str.length(); j++, pos+=3) {
                if (recognize_type_of_pipe(str.charAt(pos)) != -1) {
                    population[0].field[i][j][0] = recognize_type_of_pipe(str.charAt(pos));
                    population[0].field[i][j][1] = (int)(str.charAt(pos+1)-'0');
                }
                else {
                    System.out.println("error recognize_type_of_pipe");
                    return -1;
                }
            }
        }
        return 0;
    }
    
    static void calculate_importance_of_individual(int individ) { 
        for (int i = 0; i < size_of_field; i++) {
            for (int j = 0; j < size_of_field; j++) {
                if (i-1 > 0) {
                    if (directions[population[individ].field[i][j][0]][population[individ].field[i][j][1]][0] == true) {
                        if (directions[population[individ].field[i-1][j][0]][population[individ].field[i-1][j][1]][1] == true) {
                            population[individ].importance++;
                            population[individ].field[i][j][2]++;
                        }
                    }
                }
                if (j-1 > 0) {
                    if (directions[population[individ].field[i][j][0]][population[individ].field[i][j][1]][2] == true) {
                        if (directions[population[individ].field[i][j-1][0]][population[individ].field[i][j-1][1]][3] == true) {
                            population[individ].importance++;
                            population[individ].field[i][j][2]++;
                        }
                    }
                }
                if (i+1 < size_of_field) {
                    if (directions[population[individ].field[i][j][0]][population[individ].field[i][j][1]][1] == true) {
                        if (directions[population[individ].field[i+1][j][0]][population[individ].field[i+1][j][1]][0] == true) {
                            population[individ].importance++;
                            population[individ].field[i][j][2]++;
                        }
                    }
                }
                if (j+1 < size_of_field) {
                    if (directions[population[individ].field[i][j][0]][population[individ].field[i][j][1]][3] == true) {
                        if (directions[population[individ].field[i][j+1][0]][population[individ].field[i][j+1][1]][2] == true) {
                            population[individ].importance++;
                            population[individ].field[i][j][2]++;
                        }
                    }
                }
            }
        }
    }
    
    static void create_population() {
        sc.nextLine();
        Random rand = new Random(1);
        for (int individ = 1; individ < MAX_SIZE_OF_POPULATION; individ++) {
            System.out.println(individ);
            for (int i = 0; i < size_of_field; i++) {
                for (int j = 0; j < size_of_field; j++) {
                    population[individ].field[i][j][0] = population[0].field[i][j][0];
                    population[individ].field[i][j][1] = individ%4;
                }
            }
            calculate_importance_of_individual(individ);
        }
        
        for (int t = 0; t < MAX_SIZE_OF_POPULATION; t++) {
            System.out.println(t);
            for (int i = 0; i < size_of_field; i++) {
                for (int j = 0; j < size_of_field; j++) {
                    System.out.print(population[t].field[i][j][0] + " " + population[t].field[i][j][1] + "  ");
                }
                System.out.println();
            }
            System.out.println();
            System.out.println();
            
        }
    }
    
    static void solve() {
        Arrays.sort(population);
        for (int individ = 0; individ < MAX_SIZE_OF_POPULATION; individ++) {
            System.out.print(population[individ].importance + " ");
        }
        for (int generation = 1; generation <= MAX_NUMBER_OF_GENERATIONS; generation++) {
            
        }
    }
    
    public static void main(String[] args) {
        init_types_of_pipes();
        int input_status = input();
        if (input_status == -1) return;
        create_population();
        solve();
    } 
}
Добавлено через 41 минуту
Извините, а что такое трейс?
0
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
30.08.2015, 19:00 6
Лучший ответ Сообщение было отмечено oldoldspice как решение

Решение

Создаете класс, реализуете в нем интерфейс Comparator<NameOfYourClass> и переопределяете в нем метод compareTo.
А затем создаете объект этого класса и передаете параметром в метод Arrays.sort
1
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 20
30.08.2015, 19:45  [ТС] 7
Большое спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2015, 19:45
Помогаю со студенческими работами здесь

Как отсортировать массив по по полю ?
C# как отсортировать массив по по полю Vp? using System; using System.Collections.Generic;...

Список(List) как отсортировать по убыванию используя функции reverse(); sort(); ао убыванию
Нужно отсортировать список по убыванию используя функции reverse(); и sort(); если можно фул прогу...

В файле имеются 14 записей с полями. В начале отсортировать их по одному полю, потом по другому
Имеется файл, в котором есть поля: №(номер), ФИО, дата рождения, место работы, стаж. Подскажите,...

Как отсортировать такой массив по полю ДАТА?
Как остортировать этот массив, по полю created_time (ДАТА) ?

Qsort() Как отсортировать массив объектов по полю объекта
Здравствуйте! Никак не могу сладить с функцией qsort(). У меня есть класс, и в нем нужно...

Не получается отсортировать по полю класса
Здравствуйте! Не понимаю, в чем ошибка. Есть вектор, содержащий указатели на объекты класса Shape...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru