Zadanie z warunkami if else

0

Cześć!

Potrzebuję stworzyć metodę w klasie Room, która po wywołaniu spowoduje spadek temperatury w pokoju o 1 stopień Celsjusza, ale tylko wtedy, gdy w pokoju znajduje się klimatyzator. Dodatkowo trzeba jeszcze ustawić temperaturę graniczną, poniżej której temperatura nie spadnie (np. gdy aktualna temperatura to 20.5C, a minimalna (graniczna) 20C, to po uruchomieniu klimatyzatora w pokoju powinno być 20C (a nie 19.5C)).
Metoda dodatkowo powinna zwracać true, jeżeli temperatura została obniżona, lub false jeżeli w pokoju nie ma klimatyzatora lub osiągnięto temperaturę graniczną.
**Metoda powinna zwracać true/false.
**
Po moim kombinowaniu stworzyłam 3 metody, które nie do końca działają (przy aktualnej temperaturze 20.5C i granicznej 20C z klimatyzatorem w pokoju dalej jest 20.5*C...

 double decreaseTemp() {
        if (airConditioning && temperature == 0.5 + limitTemperature) {
            return limitTemperature;
        } else if (airConditioning && temperature > limitTemperature) {
            return temperature--;
        } else if (!airConditioning) {
            return temperature;
        } else {
            return limitTemperature;
        }
    }

    double decreasedTemp() {
        return Math.max(decreaseTemp(), limitTemperature);
    }

    boolean decreaseTempAndNoAirConditioningAndTempLimit() {
        if (airConditioning && temperature > limitTemperature) {
            return true;
        } else if (!airConditioning || temperature == limitTemperature) {
            return false;
        } else {
            return false;
        }
    }

Z góry dziękuję za pomoc!

1

A jak będzie 20.25 stopnia Celcjusza to jak ma się zachować program?

Update1
Tak nie rób:

if (!airConditioning || temperature == limitTemperature) {
            return false;
        } else {
            return false;
        }

bo wystarczy return false

Update 2
temperature i limitTemperature to int czy double?

Update 3
W ogóle to po co ci linia (airConditioning && temperature == 0.5 + limitTemperature)? Ona psuje to o co pytasz

Uppate 4

po warunku (airConditioning && temperature > limitTemperature) nie odejmuj na sztywno -1 tylko tam sprawdzaj czy różnica między aktualną temperaturą a limitem nie jest mniejsza od 1

if (airConditioning && limitTemperature < temperature ) {
  if (1 < (temperature - limitTemperature)) {
    temperature -=1;
  } else {
    temperature = limitTemperature;
  }
}
0

@KamilAdam:

Dziękuję za wskazówki.

Temperatura to double.

Pytanie, jak powinna wyglądać ta metoda, aby zwracała true/false zamiast liczb?

1

IMHO ztarczy warunek na obniżenie temperatury czyli:

boolean decreaseTempAndNoAirConditioningAndTempLimit() {
  return airConditioning && limitTemperature < temperature ;
}
0

A da się to wszystko wrzucić do jednej metody?

2
boolean eh() {
  val condition = airConditioning && limitTemperature < temperature;
  temperature -= !condition ? 0 : Math.min(1, temperature - limitTemperature);
  return condition;
}
0

@Agnes94:

porównywanie double na równość nie ma sensu, ono się po prostu nie udaje.
Prawdopodobnie w tym projekcie, jak go przemyśleć, nie zachodzi taka sytuacja. Ale w razie czego porównuje się "z epsylonem"

1 użytkowników online, w tym zalogowanych: 0, gości: 1