что бы на джаве при каждом запуске были одинаковые данные и выход был при кажом запуске один и тот же - вопрос №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());
}
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 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 минут
}
}