Здравствуйте. Подскажите как доработать задачу: Создать имитационную модель «причал морских катеров». Необходимо вводить следующую информацию: 1. Среднее время между появлениями пассажиров на причале в разное время суток. 2. Среднее время между появлениями катеров на причале в разное время суток. 3. Тип остановки катер (конечная или нет). Необходимо определить: 1. Среднее время пребывание человека на остановке. Оставшаяся часть задания: Необходимо определить: 2. Достаточный интервал времени между приходами катеров, чтобы на остановке находилось не более N людей одновременно. 3. Количество свободных мест в катере является случайной величиной. Также прошу подсказать по счет рефакторинга метода "runSimulation". Как его интуитивно разделить на другие методы, так чтобы код был читабельным.
/**
 * Главный класс
 */
public class Main {
    public static void main(String[] args) {
        long avgPassengerInterval = 60000; // 1 минута - 60000 мс
        long avgBoatInterval = 120000;
        PierSimulation simulation = new PierSimulation(avgPassengerInterval, avgBoatInterval);
        simulation.runSimulation(1000);
    }
}
/**
 * Класс, представляющий пассажира.
 */
public class Passenger {
    private final long arrivalTime;

    /**
     * Конструктор для создания нового пассажира.
     * @param arrivalTime время прибытия пассажира на причал.
     */
    public Passenger(long arrivalTime){

        this.arrivalTime = arrivalTime;
    }

    /**
     * Получает время прибытия пассажира.
     * @return время прибытия
     */
    public long getArrivalTime(){

        return arrivalTime;
    }
}
/**
 * Класс, представляющий катер.
 */
public class Boat {

    /**
     * Вместимость (катер расширяться не может!)
     */
    private final int capacity;

    /**
     * Является ли остановка конечной. (Тип остановки катер (конечная или нет))
     */
    private final boolean isTerminal;

    /**
     * Конструктор для создания нового катера.
     * @param capacity   вместимость катера
     * @param isTerminal конечная ли остановка
     */
    public Boat(int capacity, boolean isTerminal) {
        this.capacity = capacity;
        this.isTerminal = isTerminal;
    }

    /**
     * Получает вместимость катера.
     * @return вместимость
     */
    public int getCapacity() {
        return capacity;
    }

    /**
     * Проверяет, является ли остановка конечной.
     * @return true, если остановка конечная, иначе false
     */
    public boolean getIsTerminal() {
        return isTerminal;
    }
}
import java.util.LinkedList;
import java.util.Queue;
import java.util.Random;

/**
 * Основной класс для симуляции работы причала.
 */
public class PierSimulation {

    /**
     * Пассажиры.
     */
    private final Queue<Passenger> passengerQueue = new LinkedList<>();

    /**
     * Рандом.
     */
    private final Random random = new Random();

    /**
     * Среднее время прибытия пассажиров (мс). (Среднее время между появлениями пассажиров на причале в разное время суток)
     */
    private final long avgPassengerInterval;

    /**
     * Среднее время прибытия катеров (мс). (Среднее время между появлениями катеров на причале в разное время суток).
     */
    private final long avgBoatInterval;

    /**
     * Конструктор для создания новой симуляции пирса.
     * @param avgPassengerInterval среднее время прибытия пассажиров
     * @param avgBoatInterval среднее время прибытия катеров
     */
    public PierSimulation(long avgPassengerInterval, long avgBoatInterval) {
        this.avgPassengerInterval = avgPassengerInterval;
        this.avgBoatInterval = avgBoatInterval;
    }

    /**
     * Генерация свободных рандомных мест в катере.
     * @return рандомное кол-во мест.
     */
    private int generateFreeSeats(){
        return random.nextInt(11);
    }

    /**
     * Метод по запуску симуляции.
     * @param iteration - количество итераций - этапов,
     * currentTime - текущее время,
     * totalWaitingTime - общее время ожидания,
     * averageWaitingTime - среднее время ожидания,
     * nextPassengerTime - время следующего пассажира,
     * getArrivalTime - получает время прибытия пассажира,
     * nextBoatTime - время следующего отплытия,
     * generateRandomTime - генерирует рандомное время на основе среднего интервала,
     * newPassenger - новый пассажир,
     * passengerQueue - очередь пассажиров,
     * totalPassengersProcessed - общее количество обработанных пассажиров,
     * avgPassengerInterval - среднее время прибытия пассажиров (мс),
     * avgBoatInterval - среднее время прибытия катеров (мс),
     * arrivingBoat - прибывающий катер.
     */
     public void runSimulation(int iteration){
        long currentTime = 0;
        long totalWaitingTime = 0;
        long totalPassengersProcessed = 0;

        for (int i = 0; i < iteration; i++) {
            long nextPassengerTime = currentTime + generateRandomTime(avgPassengerInterval);
            Passenger newPassenger = new Passenger(nextPassengerTime);
            passengerQueue.add(newPassenger);

            long nextBoatTime = currentTime + generateRandomTime(avgBoatInterval);

            Boat arrivingBoat = new Boat(generateFreeSeats(), random.nextBoolean());
            while (!passengerQueue.isEmpty() && nextBoatTime >= passengerQueue.peek().getArrivalTime()) {
                Passenger passenger = passengerQueue.poll();
                totalWaitingTime += nextBoatTime - passenger.getArrivalTime();
                totalPassengersProcessed++;
            }
            currentTime = nextBoatTime;
        }
        double averageWaitingTime = totalPassengersProcessed > 0 ? (double) totalWaitingTime / totalPassengersProcessed : 0;
        System.out.printf("Среднее время прибытия пассажиров на остановке: %.2f секунд", averageWaitingTime / 1000);
    }

    /**
     * Генерирует рандомное время на основе среднего интервала.
     * @param average Среднее значение интервала времени (мс)
     * @return случайное время в (мс) на основе экспоненциального распределения
     */
    private long generateRandomTime(long average){
        return (long) (-Math.log(1.0 - random.nextDouble()) * average);
    }
}
Пока выходит результат: Среднее время прибытия пассажиров на остановке: 124,56 секунд Спасибо.