Przekazanie boolean do innej klasy

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!

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"));
    }
}
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;
}

}

0

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

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 +
                '}';
    }
}
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).

1

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

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;
}

}

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”

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