Как заморозить переменную в Java?

147
17 октября 2018, 13:50

Есть вес кошки, есть максимальный и минимальный возможный вес, при выходе за пределы допустимого веса кошка умирает. Как заморозить переменную "weight", т.е. что-бы вес мёртвой кошки нельзя было менять?

Я попытался использовать final, но по моему он работает только при объявлении новой переменной. Или не надо было писать условие if в конструкторе, хотя при написании в классе всё становится ещё хуже...

public Cat()
{
    weight = 1500.0 + 3000.0 * Math.random();
    originWeight = weight;
    minWeight = 1000.0;
    maxWeight = 9000.0;
    count++;
    if(weight < minWeight || weight > maxWeight) {
        this.weight = final();
    }
}

Хм, а чем плох сеттер с проверкой? ru.wikipedia.org/wiki/Setter#Java

Что-то такое уже есть. Но не понимаю как зафиксировать вес?

public String getStatus()
{
    if(weight < minWeight) {
        count--;
        return "Dead";
    }
    else if(weight > maxWeight) {
        count--;
        return "Exploded";
    }
    else if(weight > originWeight) {
        return "Sleeping";
    }
    else {
        return "Playing";
    }
}
Answer 1

Как уже писали в коментах, Вам нужно сделать setter с условием.

class Cat {
    private int weight = 0;
    public Cat(int weight) {
        this.weight = weight;
    }
    public void setWeight(int weight) {
        // Если вес меньше 100 изменяем значение переменной иначе ничего не делаем
        // Если условие не выполнено можно выкинуть ошибку или еще что то сделать
        if (this.weight < 100){
            this.weight = weight;
        } else {
            System.out.println("Кот слишком толстый");
        }
    }
    public int getWeight() {
        return this.weight;
    }
}
Answer 2
public class Cat {
    public static int count;
    private double weight;
    private boolean isDead;
    public Cat(double weight) {
        this.weight = weight;
        this.count++;
        if (weightKill()) {
            System.out.println('Dead before born');
        }
    }
    public void setWeight(double weight) {
        if (this.isDead) {
            System.out.println('This cat is dead yet');
            return;
        } 
        this.weight = weight;
        if (weightKill()) {
            System.out.println('This diet is killing');
        }
    }
    private boolean weightKill() {
        if (this.weight > 20.0 || this.weight < 1.0) {
            this.isDead = true;
            this.count--;
        }
        return this.isDead;
    }
}
READ ALSO
Отправить изображения при регистрации

Отправить изображения при регистрации

Есть программа, которая позволяет пользователю войти и добавить продуктыПри регистрации отправляется линк для активации профиля это в email - е выглядит...

163
Переопределение цвета CheckBox - Android

Переопределение цвета CheckBox - Android

Возникла проблема с программным переопределением цвета рамки CheckBox'а в отключенном состоянии

144
Как сделать связанную анимацию? (libgdx+java)

Как сделать связанную анимацию? (libgdx+java)

Не знаю как подступиться к задачеЕсть actor который крутит анимацию, при смене кадра связанный объект player должен сдвинуться

156
Есть в библиотеке libgdx классы реализующие экранный контролер?

Есть в библиотеке libgdx классы реализующие экранный контролер?

Есть ли в библиотеке libgdx классы реализующие экранный контроллер, идеально было бы "рычажок в круге"?

162