Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java SE (J2SE)

Войти
Регистрация
Восстановить пароль
 
robotcode
0 / 0 / 0
Регистрация: 20.09.2017
Сообщений: 52
#1

Задача "Со станции A на Станцию B" - Java SE

09.02.2018, 18:31. Просмотров 242. Ответов 4
Метки нет (Все метки)

Доброго времени суток

Подкинули интересную задачу. Очень интересно посмотреть путь решения максимально отражающий всю мощь ООП
Условие:
Со станции A на станцию B поезд может добраться 3 способами:
1. Прямой путь
2. По дуге окружности
3. Через станцию C (участки AC и СB - прямые)
Во время всего пути следования поезда может быть 1 остановка
Скорость поезда всегда постоянная от A до B.
Расчетная величина - t поездки + t остановки (если была)
Задание:
1. Используя только 1 оператор произвести определение и инициализацию массива из 10 поездок. В массиве должен быть каждый тип поездки задействован.
2. Сделать сортировку по убыванию t поездки
3. Вывести полученный массив
Исходные данные взять из файла, где по умолчанию все исходные данные корректные.

Загвоздка в том, что задача не совсем формально изложена. Что и должно затруднить описание нашей программной модели.

Мое решение пока не готово (в данный момент бьюсь над ним)...но как всегда, оно будет сильно отличаться от предложенных вами

Добавлено через 14 часов 45 минут
Сделал пока массив с непосредственной инициализацией полей и его вывод.
В плане иерархии классов и гибкости приложения какие-кто может дать советы ?
И правильно ли выполнил пункт "Используя только 1 оператор произвести определение и инициализацию массива из 10 поездок. В массиве должен быть каждый тип поездки задействован." ?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.company;
 
public class Main {
 
    public static void main(String[] args) {
 
        Trip[] trips = {new TripDirect(5, 40, 100),
                new TripArcCircle(10, 80, 50),
                new TripStationC(0, 40, 89, 70),
                new TripDirect(4, 120, 140),
                new TripArcCircle(6, 30, 50)
        };
 
        for (Trip trip : trips) {
            System.out.println(trip.toString());
        }
 
 
    }
}
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
package com.company;
 
public abstract class Trip {
 
    private int TimeStopMin; //у каждой поездки м.б или не быть остановка (=0)
    private int SpeedAverageKmh; //у каждой поездки есть своя средняя скорость
 
 
 
    public Trip(int timeStopMin, int speedAverage) {
        TimeStopMin = timeStopMin;
        SpeedAverageKmh = speedAverage;
    }
 
 
    public int getTimeStopMin() {
        return TimeStopMin;
    }
 
    public void setTimeStopMin(int timeStopMin) {
        TimeStopMin = timeStopMin;
    }
 
    public int getSpeedAverageKmh() {
        return SpeedAverageKmh;
    }
 
    public abstract double getDistanceAB();
 
    public abstract double getTimeTripMin();
 
    @Override
    public String toString() {
        return "Trip{" +
                "TimeStopMin=" + TimeStopMin +
                ", SpeedAverageKmh=" + SpeedAverageKmh +
                ", distanceAB=" + getDistanceAB() +
                ", TimeTripMin=" + getTimeTripMin() +
                '}';
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.company;
 
public class TripDirect extends Trip {
 
    private double DistanceAB;
 
    public TripDirect(int timeStopMin, int speedAverage, int distanceAB) {
        super(timeStopMin, speedAverage);
        DistanceAB = distanceAB;
    }
 
    @Override
    public double getDistanceAB() {
        return this.DistanceAB;
    }
 
    @Override
    public double getTimeTripMin() {
        return ((DistanceAB / getSpeedAverageKmh()) * 60 + getTimeStopMin());
    }
}
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
package com.company;
 
public class TripArcCircle extends Trip {
 
    private double radius;
 
 
    public TripArcCircle(int timeStopMin, int speedAverage, double radius) {
        super(timeStopMin, speedAverage);
        this.radius = radius;
    }
 
    public double getRadius() {
        return radius;
    }
 
    @Override
    public double getDistanceAB() {
        return Math.PI * this.radius;
    }
 
    @Override
    public double getTimeTripMin() {
        return ((getDistanceAB() / getSpeedAverageKmh()) * 60 + getTimeStopMin());
 
    }
}
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
package com.company;
 
public class TripStationC extends Trip {
 
    private double DistanceAC;
    private double DistanceCB;
 
    public TripStationC(int timeStopMin, int speedAverage, int diactanceAC, int distanceCB) {
        super(timeStopMin, speedAverage);
        DistanceAC = diactanceAC;
        DistanceCB = distanceCB;
    }
 
    public double getDistanceAC() {
        return DistanceAC;
    }
 
    public double getDistanceCB() {
        return DistanceCB;
    }
 
 
    @Override
    public double getDistanceAB() {
        return this.DistanceAC + this.DistanceCB;
    }
 
    @Override
    public double getTimeTripMin() {
        return ((getDistanceAB() / getSpeedAverageKmh()) * 60) + getTimeStopMin();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2018, 18:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача "Со станции A на Станцию B" (Java SE):

Создать 3 объекта типа Dog (собака) и присвоить им имена "Max", "Bella", "Jack" - Java SE
Создать 3 объекта типа Dog (собака) и присвоить им имена "Max", "Bella", "Jack". Вот как я это пытаюсь написать: public class Solution...

Класс "Строка", реализовать через агрегирование, с использованием классов "Слово" и "Символ" - Java SE
Создать объект класса "Строка", используя классы "Слово", "Символ".Реализовать через агрегирование. При создании класса агрегируемый класс...

описать класс "многочлен".реализовать методы "произведение многочленов", "сравнение на равенство" - Java SE
описать класс "многочлен".реализовать методы "произведение многочленов", "сравнение на равенство", чтение из файла и запись в файл....

Напишите программу на JAVA:которая в строке "а роза упала на лапу азора" находит символ "У" и печатает символы строки до следующего символа "у" - Java
Помогите пожалуйста решить 1) Напишите программу на JAVA:которая в строке "а роза упала на лапу азора" находит символ "У" и печатает...

Задача из TIMUS "Странный диалог" Memmory Limit Error - Java SE
В условии задачи стоит ограничение в 1 сек. и 16 мб. так вот, мое решение занимает 18мб. Я почитал информацию и понял, что больше всего...

Задача из теста по Java - "Разработать реализацию кэша" - Java SE
Добрый вечер уважаемые форумчане! Вынужден обратиться к вам за помощью. Помогите, пожалуйста, реализовать данную задачу: Разработать...

4
Aviz__
193 / 122 / 28
Регистрация: 17.02.2014
Сообщений: 925
09.02.2018, 19:03 #2
Цитата Сообщение от robotcode Посмотреть сообщение
у каждой поездки м.б или не быть остановка (=0)
тогда зачем в суперклассе ее определять?
Вам очень хорошо показали, разные люди, как пользовать абстрактные классы, а вы опять "за рыбу деньги"((.
1
robotcode
0 / 0 / 0
Регистрация: 20.09.2017
Сообщений: 52
09.02.2018, 19:33  [ТС] #3
Скорей не правильно выразил мысль: остановка есть в любом случае, только в некоторых случаях она равняется 0.
По вашей логике: нужно тогда создавать в каждом классе по 2 конструктора (с остановкой и без). Пожалуй прислушаюсь
0
Aviz__
193 / 122 / 28
Регистрация: 17.02.2014
Сообщений: 925
09.02.2018, 19:57 #4
я про абстрактный корневой класс намекал, где можно сразу задать TimeStopMin = 0 и еще сделать реальный метод не публичный setTimeStopMin. В тех где не 0 его вызывать прям из конструктора.
1
robotcode
0 / 0 / 0
Регистрация: 20.09.2017
Сообщений: 52
10.02.2018, 01:26  [ТС] #5
Цитата Сообщение от robotcode Посмотреть сообщение
1. Используя только 1 оператор произвести определение и инициализацию массива из 10 поездок. В массиве должен быть каждый тип поездки задействован.
Java
1
2
3
4
5
6
        Trip[] trips = {new TripDirect(5, 40, 100),
                new TripArcCircle(10, 80, 50),
                new TripStationC(0, 40, 89, 70),
                new TripDirect(4, 120, 140),
                new TripArcCircle(6, 30, 50)
        };
Я правильно понял, что это оператор "присваивание" с прямой инициализацией ?
Тогда появляется вопрос, как быть если нам неизвестно количество поездок ? Ответ - никак ?
Автоматическую генерацию объектов я пока только делал через рандом и попадания в switch и все это в цикле. Но это гора операторов. А тут нужен только один и без использования рандома.
0
10.02.2018, 01:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2018, 01:26
Привет! Вот еще темы с ответами:

Java, задача на консоле. Почему тут "y" - ошибка? - Java SE
package zad4; public class main { public static void main(String args) { double s, x, a, y, ...

Ошибка в программе, задача - "Алена и таблички" - Java SE
public static void main(String args) { Scanner in = new Scanner(System.in); int x = in.nextInt(); int y = in.nextInt(); int...

Задача "Монополия": Определите условия, при которых игрок пройдет максимальное количество клеток. - Java SE
У меня задача такая: Пусть есть некоторое закольцованное игровое поле и набор правил для перемещения по нему. Примеры правил:...

Олимпиадная задача "Младший бит" - Java SE
Для заданного положительного целого A (1 ≤ A≤100), вывести младший бит A. Например, если A = 26, то его мы можем записать в двоичном...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru