С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 4

Не могу отсортировать классы наследники

08.07.2018, 11:18. Показов 1511. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дали задание на практике :
Смоделировать товарный склад с возможностью вывода различных
отчетов на консоль.
Создать абстрактный класс Product с полями ean: Long, price: Double,
name: String. От него отнаследовать классы Food (cal:Int,
creationDate: Date, expirationTime: Int), Appliance(inputPower: Int),
Clothes(size: Byte, material: String). Переопределить метод toString()
для читаемого вывода.
Создать массив Product[] warehouse = {…}, инициализировать его
небольшим количеством различных товаров. Вывести отчёты:
1. Отсортировать все элементы по цене, имени.
2. Сгруппировать по типу и отсортировать в каждой группе по имени и
цене.
3. Отсортировать все элементы Food по калорийности.
4. Отсортировать все элементы Appliance по мощности.
5. Отсортировать одежду по размеру.

проблема в том, что не могу отсортировать элементы только классов наследников, к примеру "Отсортировать все элементы Food по калорийности" и "Сгруппировать по типу и отсортировать в каждой группе по имени и
цене."

Помогите пожайлуста

Вот мой код:


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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
import java.util.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.lang.String;
 
abstract class Product 
{
    
    protected Long ean;
    protected Double price;
    protected String name;
    
    public Product (String name, Double price, Long ean) {
        this.name = name;
        this.price = price; 
        this.ean = ean;
    }
 
    public String getName() {
        return name;
    }
    
    public Double getPrice() {
        return price;
    }
    
    public Long getEan() {
        return ean;
    }
}
 
class Food extends Product  { 
    
    private int cal;
    private Date creationDate;
    private int expirationTime;
    
    public Food(String name, Double price, Long ean, int cal, Date creationDate, int expirationTime) {
        super(name, price, ean);
        this.cal = cal;
        this.creationDate = creationDate;
        this.expirationTime = expirationTime;
    }
    
    public String getName() {
        return name;
    }
    
    public int getCal() {
        return cal;
    }
    
    public Date getCreationDate() {
        return creationDate;
    }
    
    public int ExpirationTime() {
        return expirationTime;
    }
 
    
    public String toString() {
        return name+", "+price+", "+ean+", "+cal+", "+creationDate+", "+expirationTime;
    }
}
 
 
class Appliance extends Product{
    
    private int inputPower;
    
    public Appliance(String name, Double price, Long ean, int inputPower) {
        super(name, price, ean);
        this.inputPower = inputPower;
    }
    public String toString() {
        return name+", "+price+", "+ean+", "+inputPower;
    }
    
    public int getInputPower() {
        return inputPower;
    }
    
}
 
class Clothes extends Product{
    
    private byte size;
    private String material;
    
    public Clothes(String name, Double price, Long ean, byte size, String material) {
        super(name, price, ean);
        this.material = material;
        this.size = size;
    }
    public String toString() {
        return name+", "+price+", "+ean+", "+size+", "+material;
    }
    
    public byte getSize() {
        return size;
    }
    
    public String getMaterial() {
        return material;
    }
} 
 
class Test {
    
    public static void main (String []args) throws ParseException {
        
        Scanner sc = new Scanner(System.in);
    
        SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
        
        String Donut = "01.07.2018";
        Date Dt = format.parse(Donut);
        
        String CakeIsALie = "27.06.2018";
        Date CIAL = format.parse(CakeIsALie);
        
        Product[] warehouse = new Product[6];
        warehouse[0] = new Food("Donut", 0.250, 104353L, 300, Dt, 5);
        warehouse[1] = new Food("Cake is a lie", 1.499, 103372L, 250, CIAL, 10);
        warehouse[2] = new Appliance("Refrigerator", 14.999, 206535L, 400);
        warehouse[3] = new Appliance("Microwave Oven", 3.999, 204753L, 1800);
        warehouse[4] = new Clothes("Jacket", 1.499, 467524L, (byte) 50, "Polyester");
        warehouse[5] = new Clothes("Tshirt", 0.499, 463343L, (byte) 45, "Cotton");
        
        System.out.println(" Выберете тип сортировки:\n "
                + "1 - Отсортировать по названию\n "
                + "2 - Отсортировать по цене\n "
                + "3 - Отсортировать все элементы Food по калорийности\n "
                + "4 - Отсортировать все элементы Appliance по мощности\n "
                + "5 - Отсортировать одежду по размеру\n "
                + "6 - Сгруппировать по типу и отсортировать в каждой группе по имени и цене\n");
        
        
         //Arrays.sort(warehouse, new SortedByPrice());
          //  System.out.println("\n~~~~~ сортировка по цене ~~~~~");
        
          //  for(Product warehouse1 : warehouse)
            //    System.out.println(warehouse1.toString());
            
            
            Arrays.sort(warehouse, new SortedFoodByCal());
            for(Product warehouse1 : warehouse)
                System.out.println(warehouse1.toString());
        }
}
 
//сортировка по названию
class SortByName implements Comparator<Product> {
    
    public int compare(Product obj1, Product obj2)
    {
        String str1 = obj1.getName();
        String str2 = obj2.getName();
            
        return str1.compareTo(str2);
    }
}
 
//сортировка по цене
class SortedByPrice implements Comparator<Product>
{
    public int compare(Product prc1, Product prc2)
    {
        Double price1 = prc1.getPrice();
        Double price2 = prc2.getPrice();
 
        if (price1 > price2) {
            return 1;
        } else if (price1 < price2) {
            return -1;
        } else {
            return 0;
        }
    }
}
 
 
 
class SortedFoodByCal implements Comparator<Product> 
{
    
    public int compare(Product cl1, Product cl2)
    {
    int cal1 = ((Food) cl1).getCal();
    int cal2 = ((Food) cl2).getCal();
 
    if (cal1 > cal2) {
        return 1;
    } else if (cal1 < cal2) {
        return -1;
    } else {
        return 0;
    }
}
 
    
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2018, 11:18
Ответы с готовыми решениями:

Создать класс Robot и классы-наследники от него
Создать класс Robot от которого следует унаследовать CoffeRobot, RobotDancer, RobotCoocker. В Robot является метод work (), в котором...

Классы и наследники
Доброго времени суток, я наверное уже достал этим вопросом, но помогите разобраться. По условию задания, у меня есть 2 класса: Sensor и...

Классы и наследники
Есть класс, в классе лист, в листе несколько значений, которые могут принимать поля, есть также возможность дополнить лист новыми...

7
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
08.07.2018, 11:55
Seuush, как же можно отсортировать массив типа Product по калориям?
0
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 4
08.07.2018, 12:04  [ТС]
iSmokeJC,
Пробовал еще вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class SortedFoodByCal implements Comparator<Food> 
{
    
    public int compare(Food cl1, Food cl2)
    {
    int cal1 = cl1.getCal();
    int cal2 = cl2.getCal();
 
    if (cal1 > cal2) {
        return 1;
    } else if (cal1 < cal2) {
        return -1;
    } else {
        return 0;
    }
}
Но при этом компилятор начинает ругаться на эту строчку:
Java
1
2
3
 Arrays.sort(warehouse, new SortedFoodByCal()); // <---
            for(Product warehouse1 : warehouse)
                System.out.println(warehouse1.toString());
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
08.07.2018, 12:06
Дык, правильно - у тебя в массиве Product[] warehouse лежат не только Food. К нему нельзя применить компаратор, типизованый под Food.
0
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 4
08.07.2018, 12:10  [ТС]
iSmokeJC, и как тогда можно реализовать сортировку? Может что то глупое спрашиваю, просто с java знаком неделю
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
08.07.2018, 12:15
Лучший ответ Сообщение было отмечено Seuush как решение

Решение

Можно замутить новый массив типа Food, извлеченный из основного, его отсортировать и вывести. Т.е. на экран выйдут только продукты типа Food.
А вообще, я бы посоветовал вместо массива использовать список. Удобней на порядок. И в плане сортировки и в плане вывода. Да и вообще...

Добавлено через 1 минуту

Не по теме:


ЗЫ: чтобы в ответ добавить имя пользователя, щелкни на его ник

Миниатюры
Не могу отсортировать классы наследники  
0
0 / 0 / 0
Регистрация: 08.07.2018
Сообщений: 4
08.07.2018, 12:17  [ТС]
iSmokeJC, Спасибо большое, сейчас попробую. Мне в задании сказано через массив сделать)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
08.07.2018, 12:22
Seuush, instanceof тебе в помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2018, 12:22
Помогаю со студенческими работами здесь

Классы-наследники
Добрый день, мог бы кто-то мне помочь разъяснить? Вот у меня есть базовый класс Goods, от него есть производные классы...

Классы наследники
Всем привет, прошу помочь разобраться с ошибкой: 1&gt;e:\my programs for c++\lesson 9 numb 9\lesson 9 numb 9\main.cpp(59) : error...

Классы наследники
Нужна ваша помощь. Срочно! Для созданного класса Massive, создать класс- потомок с полями: длина, элементы массивов Реализовать...

Классы и наследники, несколько функций
Привет всем! Изучаю классы в C# и принцип SOLID, возникла такая проблема. Есть класс А от которого наследуются классы B и C. В...

Написать абстрактный класс и классы-наследники
Имеется набор формул, которые необходимо рассчитать. Результатом формул являются либо числа типа double, либо список List&lt;double&gt;,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru