From 289935499bf5654c88ebea374d1333a0eabd6058 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Mon, 10 Feb 2025 20:09:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D1=83=D0=BB=D1=8F=D1=86=D0=B8=D0=B8=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BD=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/spbstu/telematics/java/Room.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/lab3/src/main/java/ru/spbstu/telematics/java/Room.java b/lab3/src/main/java/ru/spbstu/telematics/java/Room.java index dee15ca..6b44c80 100644 --- a/lab3/src/main/java/ru/spbstu/telematics/java/Room.java +++ b/lab3/src/main/java/ru/spbstu/telematics/java/Room.java @@ -1,14 +1,48 @@ package ru.spbstu.telematics.java; +import java.util.Random; + /* * Симулирует физические процессы, протекающие в команте. */ public class Room implements Runnable { - private double temperature; - private double humidity; + // Температура измеряется в градусах цельсия + private volatile double temperature = 24.0; + + public double getTemperature() { + return temperature; + } + + // Относительная влажность в процентах + private volatile double humidity = 0.5; + + public double getHumidity() { + return humidity; + } + + // Параметры произвольного изменения температуры и влажности в комнате + private Random random = new Random(); + private double temperatureMaxStep = 1; + private double humidityMaxStep = 0.05; + private long maxStepTimeMs = 3000; @Override public void run() { + // Пусть температура и влажность произвольно изменяются со временем + while (!Thread.interrupted()) { + temperature += (random.nextDouble() - 0.5) * 2 * temperatureMaxStep; + humidity += (random.nextDouble() - 0.5) * 2 * humidityMaxStep; + try { + Thread.sleep(getStepTime()); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + private long getStepTime() { + // Спим от 0.5 * maxStepTimeMs до maxSteTimeMs миллисекунд + return (long) (random.nextDouble() * 0.5 + 0.5) * maxStepTimeMs; } }