что бы на джаве при каждом запуске были одинаковые данные и выход был при кажом запуске один и тот же - вопрос №3711990

В кинотеатре 6 кинозалов. В них показывают 3 фильма.

1й фильм идёт 1 час 20 мин.

2й фильм идёт 1 час 45 мин.

3й фильм идёт 2 час 15 мин.

В 3 залах помещается 300 человек, а в остальные 150. Каждый фильм показывают в 2 залах разной вместимости. После сеанса зал убирают. На большой зал требуется время, нормально распределённое с матожиданием 15 мин. и дисперсией 5 мин. На маленький требуется время, нормально распределённое с матожиданием 8 мин. и дисперсией 4 мин. На каждый сенас зал запонен от 45% до 95% (равномерное распределение). У каждого зала есть вероятность 3%, что оборудование в нём потребует ремонта в течение 1,5 часов. Промоделировать работу кинотеатра в течение 10 дней по 12 часов. Определить количество сеансов каждого фильма. Количество зрителей на каждом фильме, загруженность каждого зала, среднее время уборки каждого зала, количество поломок оборудования.

import java.util.*;
import java.lang.*;

class Rextester
{
public static void main(String args[])
{
World myNewWorld = new World();
myNewWorld.simulate();
myNewWorld.showStats();
}
}

class World
{

Movie[] m = new Movie[3];
MovieHall[] mh = new MovieHall[6];

void simulate() {

m[0] = new Movie(80);
m[1] = new Movie(105);
m[2] = new Movie(135);

mh[0] = new MovieHall(300, m[0]);
mh[1] = new MovieHall(300, m[1]);
mh[2] = new MovieHall(300, m[2]);
mh[3] = new MovieHall(150, m[0]);
mh[4] = new MovieHall(150, m[1]);
mh[5] = new MovieHall(150, m[2]);

System.out.println("==== simulate()");
for(int day = 0; day < 10; day++) {// моделируем рабочие дни
System.out.format("%n= day: " + day);

System.out.format("%n== hall: ");
for(int i = 0; i < 6; i++) // моделируем каждый зал независимо
{
System.out.format(".." + i + " ");
mh[i].startDay(12*60); // 12 рабочих часов в минутах
do {
mh[i].showMovie();
mh[i].makeCleaning();
if (mh[i].isBreakdownHappened()) mh[i].makeRecover();
} while (mh[i].isWorkTime());
}
}
System.out.println("");
System.out.println("");
}

void showStats() {

System.out.println("==== showStats()");
for(int i = 0; i < 3; i++) {
System.out.println("= movie: " + i );
System.out.println(«movieShowCount = » + m[i].getMovieShowCount());
System.out.println(«moviegoersСount = » + m[i].getMoviegoersСount());
}

for(int i = 0; i < 6; i++) {
System.out.println("= hall: " + i );
System.out.format(«loadingRatio = %.1f%%%n», 100* mh[i].getLoadingRatio());
//System.out.println(«loadingRatio = » + mh[i].getLoadingRatio());
//System.out.println(«avgCleaningTime = » + mh[i].getAvgCleaningTime());
System.out.format(«avgCleaningTime = %.1f min%n», mh[i].getAvgCleaningTime());
System.out.println(«equipmentFailuresCount = » + mh[i].getEquipmentFailuresCount());

}

}
}

class Movie
{
int length;
int _movieShowCount = 0;
int _moviegoersСount = 0;

public Movie(int __length) { length = __length; }
public int getLength() { return length; }
public int getMovieShowCount() { return _movieShowCount; }
public int getMoviegoersСount() { return _moviegoersСount; }

public void _addMovieShow(int __moviegoersСount)
{ _movieShowCount = _movieShowCount + 1;
_moviegoersСount = _moviegoersСount + __moviegoersСount;
}
}

class MovieHall
{
Movie currentMovie;
int moviegoersLimit;

int workTimeToday;

double _loadingRatio = 0;
int _totalMoviegoers = 0;
int _totalMovieShowCount = 0;

double _avgCleaningTime = 0;
int _totalCleaningTime = 0;
int _totalCleaningCount = 0;

int _equipmentFailuresCount = 0;

public double getLoadingRatio()
{
_loadingRatio = (double)_totalMoviegoers / (double)(moviegoersLimit * _totalMovieShowCount);
return _loadingRatio;
}

public double getAvgCleaningTime()
{ _avgCleaningTime = _totalCleaningTime / _totalCleaningCount; return _avgCleaningTime; }
public int getEquipmentFailuresCount() { return _equipmentFailuresCount; }

public MovieHall(int __moviegoersLimit, Movie __currentMovie)
{ moviegoersLimit = __moviegoersLimit; currentMovie = __currentMovie; }

public void startDay(int __workTimeToday) {
workTimeToday = __workTimeToday;
}

private static double generateUniform(double a, double b) {
Random random = new Random();
double value = random.nextDouble() * (b — a) + a;
return value;
}

private static double generateNormal(double mean, double standartDeviation) {
Random random = new Random();
double value = random.nextGaussian() * standartDeviation + mean;
if (value < 1.0) value = 1.0;
return value;
}

public int calcMoviegoersСount()
{
return (int) Math.round( moviegoersLimit * generateUniform(0.45, 0.95) ); // равномерное распределение от 45% до 95%
}

public int calcCleaningTime()
{
int time;
if ( moviegoersLimit == 300) // для большого зала
{
time = (int) Math.round( generateNormal( 15, Math.sqrt(5) ) );
}
else
{
time = (int) Math.round( generateNormal( 8, Math.sqrt(4) ) );
}
return time;
}

public boolean showMovie() {
boolean result = false;
if (currentMovie.getLength() <= workTimeToday) {
//System.out.println(«showMovie()»);
workTimeToday = workTimeToday — currentMovie.getLength();
int moviegoersСount = this.calcMoviegoersСount(); // todo
currentMovie._addMovieShow(moviegoersСount); // для статистики показов фильма
// для статистики зала
_totalMoviegoers = _totalMoviegoers + moviegoersСount;
_totalMovieShowCount++;
result = true;
}
return result;
}

public boolean isBreakdownHappened()
{
Random random = new Random();
boolean result = (random.nextInt(99) < 3); // с вероятностью 3% поломка
return result;
}

public boolean isWorkTime()
{ return (currentMovie.getLength() <= workTimeToday); }

public void makeCleaning()
{
//System.out.println(«makeCleaning()»);
int cleaningTime = calcCleaningTime(); // todo
workTimeToday = workTimeToday — cleaningTime; // делаем чистку в течении cleaningTime
// накапливаем статистику
_totalCleaningTime = _totalCleaningTime + cleaningTime;
_totalCleaningCount++;
}

public void makeRecover()
{
_equipmentFailuresCount++; // для статистики отказов
//System.out.println(«makeRecover()»);
workTimeToday = workTimeToday — 90; // ремонт занимает 90 минут
}
}

Вопрос задан анонимно
06.04.20
0 ответов
Ответов пока нет
Посмотреть всех экспертов из раздела Технологии > Java/J2EE
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store