Нужно сделать так чтобы код от сейфа можно было изменить только в том случае, если сейф уже открыт

Нужно сделать так чтобы код от сейфа можно было изменить только в том случае, если сейф уже открыт. Если сейф закрыт, но я пытаюсь изменить его код, то должна выходить ошибка. Ошибку пусть выдает через sout. То есть хотелось бы без булена решить

public class Safe {
    int pin = 1234;

    void start() {
        change(4321);
        open(1234);
    }

    void close() {
        System.out.println("Safe close");
    }

    void open(int code) {

        if (code == pin) {
            System.out.println("Welcome");

        } else {
            System.out.println("Wrong");
        }

    }

    void change(int a) {
            pin = a;
            
    }

}

Ответы (2 шт):

Автор решения: KoVadim
public class Safe {
  int pin = 1234;
  boolean isOpen = false;

  void start() {
    change(4321);
    open(1234);
  }

  void close() {
    System.out.println("Safe close");
    isOpen = false;
  }

  void open(int code) {
    if (code == pin) {
        System.out.println("Welcome");
        isOpen = true;
    } else {
        System.out.println("Wrong");
    }
  }

  void change(int a) {
    if (isOpen) {
      pin = a;
    } else {
      System.out.println("It is close");
    }
  }
}
→ Ссылка
Автор решения: azlov

Вам нужно хранить состояние о том открыт сейф или нет, когда вы пытаетесь изменить код. Самое верное решение, как вам уже подсказали, использовать boolean.

void change(int a) {
   if (isOpen) {
     pin = a;
   } else {
     // сообщение
   }
}

А там уже ошибку давать через sout или как хотите

→ Ссылка