Przekazanie boolean do innej klasy

Przekazanie boolean do innej klasy
VO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
0

Cześć,
Treść zadania:

Jeśli użytkownik użyje:
okno: - otworzy się lub zamknie
klucz: - użytkownik zabierze klucz i klucz nie będzie się już pojawiał jako jedna z opcji ( tutaj zależy mi na tym żeby przekazać po wybraniu klucza do klasy drzwi true i móc otworzyć drzwi. Na zniknięciu klucza mi nie zależy.
drzwi: - otworzą się ale tylko jeśli użytkownik zabrał klucz, jeśli nie, pozostaną zamknięte

Z góry dzięki za jakiekolwiek podpowiedzi, i tak wiem że aktualnie wywołuje metode z klucza. Pozdrawiam!

Kopiuj
import java.util.Scanner;

public class Room {
    public static void main(String[] args) {

        Drzwi drzwi = new Drzwi();
        Klucz klucz = new Klucz();
        Okno okno = new Okno();

        Scanner sc = new Scanner(System.in);
        String decision;
        do {
            System.out.println("Do wyboru: drzwi, klucz, okno. stop = przerwij");
            decision = sc.next();
            switch (decision) {
                case "drzwi" -> drzwi.openTheDor();
                case "klucz" -> klucz.keyFunction();
                case "okno" -> okno.windowFunction();
            }
        } while (!decision.equalsIgnoreCase("stop"));
    }
}
Kopiuj
public class Klucz {
    private boolean key = false;

    public boolean keyFunction() {
        if (!key) {
            System.out.println("Wziąłeś klucz");
        } else {
            System.out.println("Masz już klucz");
        }
        return key = true;
    }

    public boolean isKey(boolean key) {
        return key;
    }

    public void setKey(boolean key) {
        this.key = key;
    }
}

public class Drzwi {

private Klucz klucz = new Klucz();
private boolean openTheDor = true;


public boolean openTheDor() {
    if (klucz.keyFunction()) {
        System.out.println("Nie masz klucza  by otworzyć drzwi");
        openTheDor = false;
    } else {
        setOpenTheDor(true);
        openTheDor = true;
    }
    return openTheDor;
}

public void setOpenTheDor(boolean openTheDor) {
    System.out.println("Otworzyłeś drzwi");
    this.openTheDor = openTheDor;
}

}

Kopiuj
VO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
0

Nie podawałem bo w sumie nie jest to potrzebne :) ale poniżej załączam:

Kopiuj
public class Okno {

    private boolean isOpen = true;

    public boolean windowFunction() {
        if (isOpen) {
        setOpen(false);
        return false;
        } else {
          setClose(true);
        } return true;
    }

    public void setOpen(boolean open) {
        System.out.println("otwarte okno");
        isOpen = open;
    }

    public void setClose(boolean close) {
        System.out.println("Zamkniete okno");
        isOpen = close;
    }

    @Override
    public String toString() {
        return "Okno{" +
                "isOpen=" + isOpen +
                '}';
    }
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
3

Twój problem polega na tym że nie rozumiesz różnicy między klasą a obiektem. Otworzyłeś DWA OSOBNE NIEZALEŻNE OD SIEBIE obiekty klasy Klucz. Masz dwa miejsca gdzie występuje new Klucz();. Te dwa obiekty nie mają ze sobą nic wspólnego. To są dwa zupełnie różne klucze. Jak złamiesz klucz od mieszkania to nie sprawia nagle że klucz od samochodu też jest złamany, prawda? Mimo że oba są kluczami (czyli obiektami klasy klucz).

VO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 53
1

@Shalom: Dzięki za pomoc:) Działa

Kopiuj
public class Room {
    public static void main(String[] args) {

        Drzwi drzwi = new Drzwi();
        Klucz klucz = new Klucz();
        Okno okno = new Okno();

        Scanner sc = new Scanner(System.in);
        String decision;
        do {
            System.out.println("Do wyboru: drzwi, klucz, okno. stop = przerwij");
            decision = sc.next();
            switch (decision) {
                case "drzwi" -> drzwi.openTheDor(klucz);
                case "klucz" -> klucz.takeKey();
                case "okno" -> okno.windowFunction();
            }
        } while (!decision.equalsIgnoreCase("stop"));
    }
}

public class Drzwi {

private boolean openTheDor = true;

public boolean openTheDor(Klucz klucz) {
    if (!klucz.isKey()) {
        System.out.println("Nie masz klucza  by otworzyć drzwi");
        openTheDor = false;
    } else  {
        setOpenTheDor(true);
        openTheDor = true;
    }
    return openTheDor;
}

public void setOpenTheDor(boolean openTheDor) {
    System.out.println("Otworzyłeś drzwi");
    this.openTheDor = openTheDor;
}

}

Kopiuj
Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1912
0

Bez sensu ten kod trochę skoro można otworzyć drzwi bez klucza 🤷🏻‍♂️ Czyli działa, ale nie spełnia założeń. Już nie mówiąc o tym, że można zrobić setOpenTheDor(false), co wypisze „Otworzyłeś drzwi”

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.