Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 128
#1

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

09.02.2018, 18:31. Просмотров 343. Ответов 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"
Создать 3 объекта типа Dog (собака) и присвоить им имена "Max", "Bella",...

Описать класс "многочлен", реализовать методы "произведение многочленов", "сравнение на равенство"
описать класс "многочлен".реализовать методы "произведение многочленов",...

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

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

Задача из TIMUS "Странный диалог" Memmory Limit Error
В условии задачи стоит ограничение в 1 сек. и 16 мб. так вот, мое решение...

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

4
Aviz__
336 / 232 / 91
Регистрация: 17.02.2014
Сообщений: 1,770
09.02.2018, 19:03 #2
Цитата Сообщение от robotcode Посмотреть сообщение
у каждой поездки м.б или не быть остановка (=0)
тогда зачем в суперклассе ее определять?
Вам очень хорошо показали, разные люди, как пользовать абстрактные классы, а вы опять "за рыбу деньги"((.
1
robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 128
09.02.2018, 19:33  [ТС] #3
Скорей не правильно выразил мысль: остановка есть в любом случае, только в некоторых случаях она равняется 0.
По вашей логике: нужно тогда создавать в каждом классе по 2 конструктора (с остановкой и без). Пожалуй прислушаюсь
0
Aviz__
336 / 232 / 91
Регистрация: 17.02.2014
Сообщений: 1,770
09.02.2018, 19:57 #4
я про абстрактный корневой класс намекал, где можно сразу задать TimeStopMin = 0 и еще сделать реальный метод не публичный setTimeStopMin. В тех где не 0 его вызывать прям из конструктора.
1
robotcode
28 / 8 / 6
Регистрация: 20.09.2017
Сообщений: 128
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 - "Разработать реализацию кэша"
Добрый вечер уважаемые форумчане! Вынужден обратиться к вам за помощью....

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

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

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


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

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

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