Как рассчитать, сколько пар начало-конец работают в заданном диапазоне времени суток - PullRequest
0 голосов
/ 21 июня 2020

У меня есть класс под названием Running со временем начала и временем окончания:

public class Running {
    private double startTime;
        private double endTime;

    public Running(double startTime, double endTime) {
        this.startTime = startTime;
        this.endTime = endTime;
    }

}

И в моем основном классе:

    Running runningA = new Running(1, 10);
    Running runningB = new Running(5,9);
    Running runningC = new Running(4, 8);

Как я могу правильно рассчитать между в какое время работает большинство из них?

Например:

от 5 до 8 все они работают

от 1 до 3 только один запуск

Ответы [ 2 ]

3 голосов
/ 21 июня 2020

Я не уверен, почему класс Running сохраняет время начала и время окончания как двойные, а не целые числа, но хорошо.

Используя ваш пример:

Running runningA = new Running(1, 10);
Running runningB = new Running(5, 9);
Running runningC = new Running(4, 8);

Мы создайте List<Running> для хранения 3 экземпляров Running. Затем мы делаем следующее:

  1. Создаем Map<Integer, Integer>

  2. Go через List<Running> и находим минимальное время начала и максимальное время окончания.

  3. Запуск счетчика времени с минимальным временем начала.

  4. Go через List<Running> и посмотрите, какой экземпляры имеют счетчик времени в их диапазоне. Например, первый экземпляр имеет 1. Поэтому мы помещаем (счетчик времени, 1) на карту.

  5. Увеличиваем счетчик времени и повторяем шаг 4 до максимального времени окончания.

  6. Map содержит ответ на каждый раз. Пройдите по Map и суммируйте, какие периоды времени имеют 1 экземпляр, какие периоды времени имеют 2 экземпляра и т. Д.

1 голос
/ 21 июня 2020
• 1000 между двумя значениями, или если все объекты в списке находятся между двумя заданными числами:
public static void main(String[] args) {
    
    Running runningA = new Running(1, 10);
    Running runningB = new Running(5,9);
    Running runningC = new Running(4, 8);
    
    List<Running> list = new ArrayList<>();
    
    list.add(runningA);
    list.add(runningB);
    list.add(runningC);
            
//      for only one object:
        System.out.println(runningA.isBetween(5, 8)); //print true if object is between 5 and 8
        
//      for all objects in a list:      
        list.stream().filter(n -> n.isBetween(5, 8)).forEach(System.out::println); //print all objects between 5 and 8 
        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...