Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252

Задачка на поезда. ООП

28.05.2018, 11:16. Показов 2706. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 3 класса

1) Класс контейнер Place. Абстрактное место которое имеет 2 состояние (Занято, свободно), и статус лист.
Статус лист, это набор определенных характеристик этого места, например расположение окна, положение в пространстве итд.

Тут все просто:
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
import java.util.ArrayList;
 
public class Place {
 
    private boolean busy = false;
    private ArrayList<String> statusList = new ArrayList<>();
 
    public boolean getBusy() {
        return busy;
    }
 
    public void setBusy(boolean busy) {
        this.busy = busy;
    }
 
    public ArrayList<String> getStatusList(){
        return statusList;
    }
 
    public void removeStatusFromStatusList(String titleStatus){
        for (int i = 0; i < statusList.size(); i++) {
            if(titleStatus.equals(statusList.get(i))){
                statusList.remove(i);
            }
        }
    }// Удаляет статус по его названию
 
    public String getStatusFromStatusList(int index){
        return statusList.get(index);
    }// Возращает статус по индексу
 
    public void addStatusInStatusList(String valueStatus){
        statusList.add(valueStatus);
    }
 
}
2) Класс Cargo, хранит в себе массив Place, и может изменять их характеристики.

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
import java.util.ArrayList;
import java.util.HashMap;
 
public class Cargo {
    private int numberOfSeats; // Количество мест
    private ArrayList<Place> listPlace = new ArrayList<>(); // Лист мест.
 
    public Cargo(int numberOfSeats) {
        this.numberOfSeats = numberOfSeats;
        genPlace();
    }
 
    private void genPlace(){
        for (int i = 0; i < this.numberOfSeats; i++) {
            listPlace.add(new Place());
        }
    }//
 
    public void addPlaceState(int indexPlace, String titleStatus){
        listPlace.get(indexPlace).addStatusInStatusList(titleStatus);
    }// Добавляет новый статус на место
 
    public void removePlaceState(int indexPlace, String titleStatus){
        listPlace.get(indexPlace).removeStatusFromStatusList(titleStatus);
    }// Удаляет статус по индексу и названию
 
public ArrayList<Place> sortPlaceFree(ArrayList<Place> places, boolean free){
        ArrayList<Place> placesOut = new ArrayList<>();
        for (int i = 0; i < places.size(); i++) {
            if(places.get(i).getBusy()){
                placesOut.add(places.get(i));
            }
        }
        return placesOut;
    }// Сортирует выдает ArrayList с местами которые имеют статус true/false
 
    public ArrayList<Place> sortPlaceState(ArrayList<Place> places, String titleStatus){
        ArrayList<Place> placesOut = new ArrayList<>();
        for (int i = 0; i < places.size(); i++) {
            ArrayList<String> list = places.get(i).getStatusList();
            for (int j = 0; j < list.size(); j++) {
                if(titleStatus.equals(list.get(j))){
                    placesOut.add(places.get(i));
                }
            }
 
        }
        return placesOut;
    }// удаляет из списка, те объекты которые не содержат titleStatus
 
 
 
 
 
}

3) Последний класс, класс Train, по сути класс который конструирует из предыдущих классов, конечный продукт Train

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
public class Train {
    public Cargo train = new Cargo(198);
    private final String CAR1 = "Вагон N1";
    private final String CAR2 = "Вагон N2";
    private final String CAR3 = "Вагон N3";
    private final String CAR4 = "Вагон N4";
    private final String CAR5 = "Вагон N5";
    private final String PLAC = "Плакцартный"; // 54
    private final String SV = "Спальный вагон"; // 18
    private final String KUP = "Купейный"; // 36
    private final String DOWN = "Нижнее";
    private final String UP = "Верхнее";
    private final String SIDE = "Боковое место";
 
 
    public void genTrain(){
        for (int i = 0; i < 54; i++) {
            if(i%2 == 0){
                train.addPlaceState(i, DOWN);
            }
            else train.addPlaceState(i, UP);
            train.addPlaceState(i, CAR1);
            train.addPlaceState(i, PLAC);
            for (int j = 36; j < 54; j++) {
                train.addPlaceState(i, SIDE);
            }
        }
 
        for (int i = 54; i < 90; i++) {
            if(i%2 == 0){
                train.addPlaceState(i, DOWN);
            }
            else train.addPlaceState(i, UP);
            train.addPlaceState(i, CAR2);
            train.addPlaceState(i, KUP);
        }
        for (int i = 90; i < 108; i++) {
            train.addPlaceState(i, CAR3);
            train.addPlaceState(i, DOWN);
            train.addPlaceState(i, SV);
        }
        for (int i = 108; i < 144; i++) {
            if(i%2 == 0){
                train.addPlaceState(i, DOWN);
            }
            else train.addPlaceState(i, UP);
            train.addPlaceState(i, CAR4);
            train.addPlaceState(i, KUP);
        }
        for (int i = 144; i < 198; i++) {
            if(i%2 == 0){
                train.addPlaceState(i, DOWN);
            }
            else train.addPlaceState(i, UP);
            train.addPlaceState(i, CAR5);
            train.addPlaceState(i, PLAC);
            for (int j = 180; j < 198 ; j++) {
                train.addPlaceState(i, SIDE);
            }
        }
 
 
 
 
 
 
    }
 
 
 
 
}

В чем собственно вопрос... Я в правильном направлении двигаюсь, или я делаю какие-то костыли? Как бы вы реализовали эту задачу Надо реализовать покупки билета на поезд .

(Имеется ввиду грамотную универсальную систему где 3 пункт можно будет заменить хоть на катер, хоть на танк)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2018, 11:16
Ответы с готовыми решениями:

Задачка по ООП
Здравствуйте! Взял задачку Построить три класса (базовый и 2 потомка), описывающих некоторых работников с почасовой оплатой (один из...

Задачка с ООП про дальность полета
Вообще не могу разобраться, с этой задачкой. Вот самая задачка: Определить в английской и метрической системе мер значение дальности...

ООП задачка
Нахождение количества чисел, у которых последняя цифра 6; удаление всех чисел, стоящих после числа, на единицу большего , добавление после...

6
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.05.2018, 11:35
Java
1
2
3
4
5
6
7
 public void removeStatusFromStatusList(String titleStatus){
        for (int i = 0; i < statusList.size(); i++) {
            if(titleStatus.equals(statusList.get(i))){
                statusList.remove(i);
            }
        }
    }// Удаляет статус по его названию

Java
1
2
3
 public void removeStatusFromStatusList(String titleStatus){
        statusList.remove(titleStatus);
    }// Удаляет статус по его названию
и вообще - итераторы не проходили?
1
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252
28.05.2018, 12:43  [ТС]
Цитата Сообщение от Pablito Посмотреть сообщение
и вообще - итераторы не проходили?
Проходил) Да, так и надо было. Забыл просто про это.

Меня больше интересует с точки зрения архитектуры, эти классы построены правильно, или плохо?
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
28.05.2018, 14:53
Artyr2, ну, сам порассуждай, что у тебя каждый класс делает! твой код должен быть понятен, хотя бы по методам, не только тебе. У тебя класс "Место", содержит список статусов, предполагаю, что это класс места, должен ли он содержать это?
0
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252
28.05.2018, 15:52  [ТС]
Цитата Сообщение от Aviz__ Посмотреть сообщение
Artyr2, ну, сам порассуждай, что у тебя каждый класс делает! твой код должен быть понятен, хотя бы по методам, не только тебе. У тебя класс "Место", содержит список статусов, предполагаю, что это класс места, должен ли он содержать это?
Место и характеристики этого места. Например если взять ресторан, то каждое место(стол) имеет определенные характеристики, такие как например: для курящих для не курящих, Vip или стандарт, забронировано или нет итд.
И потому я решил сделать класс место не просто с одной характеристикой (занято свободно) Но и еще с ArrayListom<String> где хранятся все характеристик выбранного места.

Статус = характеристика, особенность.

Добавлено через 3 минуты
Ладно, завтра выложу готовую версию, с документацией и комментариями. На критику вам))
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
28.05.2018, 18:23
Artyr2, да, Бро, не понимаешь ты много((
про столик в кафе, все не так просто... Задача "Заказы в кафе"
0
19 / 19 / 1
Регистрация: 12.03.2018
Сообщений: 252
30.05.2018, 16:09  [ТС]
0.2 alpha Train

Класс контейнер Place
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
import java.util.HashSet;
 
public class Place {
    private HashSet<String> state = new HashSet<>();
    private boolean free = true;
 
    public HashSet<String> getState() {
        return state;
    }// Возращает множество статусов
 
    public void addState(String state) {
        this.state.add(state);
    }// Добавляет статус
 
    public void removeState(String state) {
        this.state.remove(state);
    }// Удаляет статус
 
    public boolean getFree() {
        return free;
    }// Возращает значение free
 
    public void setFree(boolean free) {
        this.free = free;
    }// Устанавливает значение free
 
}
Класс ListPlace

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
import java.util.ArrayList;
 
public class ListPlace {
 
    int size;
    ArrayList<Place> listPlace;
 
    public ListPlace(int size){
        this.size = size;
        listPlace = genListPlace();
    }// Конструктор
 
    private ArrayList<Place> genListPlace(){
        ArrayList<Place> list = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            list.add(new Place());
        }
        return list;
    }// Генерирует listPlace;
 
    public Place getPlace(int index){
        return listPlace.get(index);
    }// Возращает место
 
    public ArrayList<Place> sortPlaceFree(ArrayList<Place> places, boolean free){
        ArrayList<Place> placesOut = new ArrayList<>();
        for (int i = 0; i < places.size(); i++) {
            if(places.get(i).getFree()){
                placesOut.add(places.get(i));
            }
        }
        return placesOut;
    }// Сортирует выдает ArrayList с местами которые имеют статус true/false
 
    public ArrayList<Place> sortPlaceState(ArrayList<Place> places, String titleStatus){
        ArrayList<Place> placesOut = new ArrayList<>();
        for (int i = 0; i < places.size(); i++) {
            if(places.get(i).getState().contains(titleStatus)){
                placesOut.add(places.get(i));
            }
        }
        return placesOut;
    }// удаляет из списка, те Place которы не содержат статус titleStatus
 
 
}

Класс Train
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
import java.util.ArrayList;
import java.util.Random;
 
public class Train {
    ArrayList<ListPlace> carList = new ArrayList<>(); // Лист вагонов
 
    public final static String CAR1 = "Вагон N1";
    public final static String CAR2 = "Вагон N2";
    public final static String CAR3 = "Вагон N3";
    public final static String CAR4 = "Вагон N4";
    public final static String CAR5 = "Вагон N5";
    public final static String PLAC = "Плакцартный"; // 54
    public final static String SV = "Спальный вагон"; // 18
    public final static String KUP = "Купейный"; // 36
    public final static String DOWN = "Нижнее";
    public final static String UP = "Верхнее";
    public final static String SIDE = "Боковое место";
 
 
 
    public void addCar(int numberPlaces){
        carList.add( new ListPlace(numberPlaces));
    }// Добавляет вагон с заданным количеством мест
 
    public void fillCar(ListPlace places, String value){
        for (int i = 0; i < places.size; i++) {
            places.getPlace(i).addState(value);
        }
    }// Заполняет places.place значениями String value
 
    public void fillCarRange(ListPlace places, int start, int finish, String value){
        if(start >= 0 && finish <= places.size){
            for (int i = start; i < finish; i++) {
                places.getPlace(i).addState(value);
            }
        }
    }// Заполняет places значениями String value в определенном диапазоне
 
    public void fillEvenOrOdd(ListPlace places, boolean even){
        for (int i = 0; i < places.size; i++) {
            places.getPlace(i).setFree(even);
        }
    } // Заполняет places.place.free значениями true или false
 
    public void fillEvenOrOddRandom(ListPlace places){
        for (int i = 0; i < places.size; i++) {
            Random random = new Random();
            int valueRand = random.nextInt(10);
            boolean free;
            if(valueRand> 5){
                places.getPlace(i).setFree(false);
            }
 
        }
    }// Заполняет places.place.free случайными значениями true или false
 
    public void fullFillEvenOrOddRandom(Train train){
        for (int i = 0; i < train.carList.size(); i++) {
            train.fillEvenOrOddRandom(train.carList.get(i));
        }
    }
 
 
    public static void main(String[] args) {
        Random random = new Random();
        Train train = new Train();
        train.addCar(54);
        train.addCar(36);
        train.addCar(18);
        train.addCar(36);
        train.addCar(54);
        train.fullFillEvenOrOddRandom(train); // Заполняет весь поезд пассажирами (Значиния false = занято)
 
 
 
 
    }
 
 
 
}
Немного запутался... Это лучше предыдущей версии, но мне все равно кажется что-то не так... Может есть какой паттерн?

Как сюда впихнуть визитера? Или этого делать не надо? Просто я не вижу, как сюда может попасть визитер
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2018, 16:09
Помогаю со студенческими работами здесь

Рассчитать время, проведенное пассажиром поезда в пути если известна скорость поезда и расстояние между станциями
Рассчитать время, проведенное пассажиром поезда в пути если известна скорость поезда и расстояние между станциями. Скорость поезда и...

Рассчитать время, проведенное пассажиром поезда в пути если известна скорость поезда и расстояние между станциями
Рассчитать время, проведенное пассажиром поезда в пути если известна скорость поезда и расстояние между станциями. Скорость поезда и...

ООП - задачка, понять и суметь. Разбор ошибок
Дан массив действительных чисел b1;…;b10 .. Найти сумму элементов расположенных после минимального элемента.Поля и данные - закрытого типа....

Создайте программу, ведущую список сведений об отравлении поездов от станции Ухта. Информация должна содержать: номер поезда, название поезда , кол-во
помогите сделать !!! Создайте программу, ведущую список сведений об отравлении поездов от станции Ухта. Информация должна содержать:...

Задачка с массивом и задачка с формулами Ньютона и Лагранжа
Прошу помочь решить две задачи


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru