prośba o pomoc z podstawowym zadaniem z Javy

0

Cześć!
Jestem nowy na forum, tak, jak nowy w Javie... Dopiero się uczę, acz intensywnie. :D
No i mam problem, bo mi kod nie działa tak, jakbym chciał, a nie umiem wykminić, dlaczego... :/

public class Televisor {
    private boolean isOn;

    public Televisor(boolean isOn) {
        this.isOn = isOn;
    }

    public boolean turnOn() {
        boolean on = !this.isOn;
        return on;
    }

    public boolean turnOff() {
        boolean off = this.isOn;
        return off;
    }

    public void showStatus() {
        boolean status = this.isOn;
        System.out.println("Telewizor jest włączony. " + status);
    }
}
public class TeleTest {
    public static void main(String[] args) {
        Televisor televisor1 = new Televisor(false);
        televisor1.showStatus();
        televisor1.turnOn();
        televisor1.showStatus();
        televisor1.turnOff();
        televisor1.showStatus();
    }
}

Program miał wyświetlać status telewizora (domyślnie wyłączonego), włączać go i wyłączać.
Czy ktoś mógłby podpowiedzieć, co robię źle?
z góry wielkie dzięki!

1

Po co metody turnOni turnOff zwracają bolka skoro i tak z nich nie korzystasz? Z kolei metoda showStatus jak dla mnie powinna zwracać np. Stringa ze statusem i do wyświetlania i formatowania tego powinieneś mieć osobną metodę. Ta showStatus powinna się raczej nazywać getStatus.
Moim zdaniem konstruktor nie powinien mieć w parametrze statusu a niejawnie go ustawiać ze statusem off.

0

@.andy:

.andy napisał(a):

(...)

Moim zdaniem konstruktor nie powinien mieć w parametrze statusu a niejawnie go ustawiać ze statusem off.

Tak miało być. :D
ale tego jeszcze nie opanowałem...

1
public class Televisor {
    private boolean on;

    public Televisor(boolean on) {
        this.on = on;
    }

    public void turnOn() {
        this.on = true;
    }

    public void turnOff() {
        this.on = false;
    }

    public void printStatus() {
        System.out.println("Telewizor jest " + (status ? "włączony" : "wyłączony");
    }
}

albo

enum State { On, Off };

public class Televisor {
    private State state;

    public Televisor(boolean on) {
        this.state = on ? State.On : State.Off;
    }

    public void turnOn() {
        this.state = State.On;
    }

    public void turnOff() {
        this.state = State.Off;
    }

    public void printStatus() {
        System.out.println("Telewizor jest " + (status == State.On ? "włączony" : "wyłączony");
    }
}
3
.andy napisał(a):

Z kolei metoda showStatus jak dla mnie powinna zwracać np. Stringa ze statusem i do wyświetlania i formatowania tego powinieneś mieć osobną metodę. Ta showStatus powinna się raczej nazywać getStatus.

Ja bym głosował za:

public void printStatus(OStreamJakMuTam out1) {
        out1.println("Telewizor jest " + getStatus() );
    }

0

@Stój Halina: ewentualnie zrobić interface w stylu:

public interface PrintStatus<T>{
    T print();
}

I potem go implementować.

0

Moim zdaniem pole isOn powinno być ustawione domyślnie na false i nie powinieneś przekazywać go w konstruktorze, bo bardziej logicznie wydaje się, że najpierw tworzysz telewizor, który jest siłą rzeczy wyłączony a dopiero potem go włączasz metodą turnOn, w której ustawiasz isOn na true. W ogolę nie wiem czemu masz tam zaprzeczenie. No i takie statusy najlepiej trzymać w enumie tak jak ktoś wyżej wspomniał, bo wtedy, raz, że nie są prymitywami i mają jakaś konkretną, wspólną nazwę np. TvStatus i dwa, że tworzenie obiektu Televisor, jest czytelniejsze, bo zamiast pisać new Televisor(false) (nie wiadomo, co to false oznacza, można się jedynie domyślać albo wchodzić w szczegóły klasy) to piszesz new Telewisor(TvStatus.Off), ale tak jak mówiłem, nie ma sensu tego przekazywać w konstruktorze. Dużo lepszym parametrem do konstruktora, byłby enum np. TvBrand (marka tv).

0

Kochani! Wielkie dzięki za pomoc! :)
Dopiero zaczynam moją przygodą z Javą (i programowaniem w ogóle...), jestem w trakcie bootcampu. To, o czym pisaliście, faktycznie brzmi dużo logiczniej, ale... takie, a nie inne, miałem zadanie. :D
Dodam, że jedno z początkowych...
Raz jeszcze dzięki za pomoc!
Temat do zamknięcia.

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