Tv übung

Saylles

Mitglied
Kurz zum Problem.
Der User soll solange in volume bleiben bis er selber mit 0 dies verlässt und dann in das Menü davor zurückkehren.
Ich Weiss nicht was ich in der Schleife überprüfen soll. Entweder bekomme ich eine endlos Schleife oder er bricht nach der ersten Ausführung ab.
 

Anhänge

  • IMG-20200113-WA0003.jpeg
    IMG-20200113-WA0003.jpeg
    1,3 MB · Aufrufe: 19

Saylles

Mitglied
Code:
public static void main(String[] args) {

        Tv Tv1 = new Tv();
        int volume, channel, menu;
        boolean status;

        while (Tv1.menu() != 5) {

            switch () {

            case 1:
                Tv1.status(JOptionPane
                        .showInputDialog("On = Schalte den Fernseher ein\n Off = Schalte den Fernseher aus\n "));
                continue;
            case 2:
                Tv1.volume();
                continue;
            case 3:
                Tv1.channel();
                continue;
            }
        }
    }

Der User soll 1-3 waehlen mit 5 beendet er das Programm. Das wenn ich Methode tv1.menu() in die switch schreibe ruft er diese immer 2 x hintereinader auf. wie speicher ich den returnwert so das ich ihn in der while schleife verwenden kann
 
K

kneitzel

Gast
Wenn Du einen Wert mehrfach nutzen willst, dann musst Du diesen in einer Variable speichern.

Du kannst die Zuweisung auch in der While Bedingung selbst schreiben ... also sowas wie
while ((nutzerwahl = Tv1.menu()) != 5)

Kleine Anmerkung: Du solltest Variablen klein schreiben, also tv1 statt Tv1.
 

Saylles

Mitglied
Java:
import javax.swing.*;

class Tv {
    int eingabe;

    public int menu() {
        int eingabe4 = Integer.parseInt(
                JOptionPane.showInputDialog("1 = Status aendern & abfragen\n 2 = Lautstaerke aendern & abfragen\n"
                        + "3 = Programm aendern & abfragen\n 5 = Beenden sie das Programm"));
        return eingabe4;
    }

    boolean status(String eingabe3) {
        boolean status1 = false;

        if (eingabe3.equals("On")) {
            status1 = true;
        } else {
            status1 = false;
        }
        if (status1 == true) {
            System.out.println("Der Fernseher ist an");
        } else {
            System.out.println("Der Fernseher ist aus");
            System.exit(0);
        }
        return status1;

    }

    void volume() {

        int eingabe1 = 0;
        do {
            eingabe1 = Integer.parseInt(JOptionPane.showInputDialog(
                    "Geben sie eine Zahl zwischen 1 & 10 ein.\n" + "Ihre Aktuelle Lautstaerke ist " + eingabe1));
            System.out.println(eingabe1);
        } while (eingabe1 != 0);
    }

    void channel() {
        int eingabe2 = 1;

        do {
            eingabe2 = Integer.parseInt(JOptionPane.showInputDialog(
                    "Geben sie eine Zahl zwischen 1 & 10 ein.\n" + "Ihre Aktuelles Programm ist " + eingabe2));
        } while (eingabe2 != 0);
    }

}

public class Fernseher {

    public static void main(String[] args) {

        Tv tv1 = new Tv();
        int menu;
        

        if ((tv1.status(JOptionPane.showInputDialog("On = Schalte den Fernseher ein\n Off = Schalte den Fernseher aus\n ")) == true)) {
        while ((menu = tv1.menu()) != 5) {

            switch (menu) {

            case 1:
                tv1.status(JOptionPane
                        .showInputDialog("On = Schalte den Fernseher ein\n Off = Schalte den Fernseher aus\n "));
                continue;
            case 2:
                tv1.volume();
                continue;
            case 3:
                tv1.channel();
                continue;
            case 5:
                System.exit(0);
            }
        }
        }else {
            System.exit(0);
        }
        
    }

    

}

Aufgabenstellung:
Erstellen Sie ein Programm, das einen Fernseher als Objekt abbildet. Der Fernseher soll mindestens folgende Eigenschaften haben:
• Lautstärke,
• Programm und
• eingeschaltet beziehungsweise ausgeschaltet.
Alle drei Eigenschaften sollen geändert werden können. Beachten Sie bei der Umsetzung bitte folgende Vorgaben:
• Eine Änderung von Lautstärke und Programm soll nur dann möglich sein, wenn der Fernseher eingeschaltet ist.
• Schalten Sie den Fernseher in Ihrem Programm mindestens einmal ein und ändern Sie die Lautstärke. Wechseln Sie mindestens dreimal das Programm. Schalten Sie den Fernseher dann wieder aus.
• Geben Sie nach jeder Änderung den aktuellen Zustand des Fernsehers auf der Konsole aus.
• Greifen Sie nur über die Methoden der Klasse auf die Instanzvariablen zu. Das gilt auch für die Ausgabe der Werte.

Habe ich die Aufgabenstellung damit richtig verstanden und umgesetzt?
 

mihe7

Top Contributor
Habe ich die Aufgabenstellung damit richtig verstanden und umgesetzt?
Nein. Leider so ziemlich nichts davon.

Geh die Aufgabe doch einfach schrittweise durch:

Der Fernseher soll mindestens folgende Eigenschaften haben:
• Lautstärke,
• Programm und
• eingeschaltet beziehungsweise ausgeschaltet.

Mit Eigenschaften sind Attribute (aka Instanzvariablen) gemeint. In Deiner Klasse Tv sind von den drei geforderten keine einzige zu sehen.

In der Aufgabe steht auch nichts davon, dass Du zwei Klassen verwenden sollst oder der Benutzer irgendwelche Eingaben tätigen können soll.

(NB: Tv ist die Abkürzung für ein Synonym von Fernseher: es ist keine gute Idee zwei Klassen mit Synonymen zu bezeichnen.)

Erstell also erstmal eine Klasse Fernseher mit drei Instanzvariablen, die die o. g. Eigenschaften am besten darstellen.
 

Saylles

Mitglied
Java:
class Fernseher {

    int v, c;
    boolean s;

    void init(int vol, int ch, boolean sta) {
        v = vol;
        c = ch;
        s = sta;
    }

    boolean getStatus() {
        return s;
    }

    int getVolume() {
        return v;
    }

    int getChannel() {
        return c;
    }

    int setVolume(int swvol) {

        if (s == true) {
            v = swvol;
        } else {
            v = 0;
        }
        return v;

    }

    int setChannel(int swCha) {
        if (s == true) {
            c = swCha;
        } else {
            c = 0;
        }
        return c;
    }

    boolean setStatus(boolean setS) {
        if (setS == true) {
            s = setS;
        } else {
            s = setS;
        }
        return s;
    }

}

public class Einsendung5c {

    static void ausgabe(Fernseher samsung) {

        if (samsung.getStatus() == true) {
            System.out.println("Der Fernseher ist an.");
        }else {
            System.out.println("Der Fernseher ist aus.");
        }
        System.out.println("Sie haben Programm: " + samsung.getChannel());
        System.out.println("Es ist Lautstaerke " + samsung.getVolume() + " eingestellt.");

        

    }

    public static void main(String[] args) {

        Fernseher samsung = new Fernseher();

        //samsung.init(0, 0, false);
        //ausgabe(samsung);

        samsung.setStatus(true);
        ausgabe(samsung);
        
        samsung.setVolume(5);
        ausgabe(samsung);
        
        samsung.setChannel(4);
        ausgabe(samsung);

        samsung.setChannel(5);
        ausgabe(samsung);
        
        samsung.setChannel(12);
        ausgabe(samsung);
        
        samsung.setStatus(false);
        ausgabe(samsung);
    }

}

versuch nummer 2.
 

mihe7

Top Contributor
versuch nummer 2.
Das sieht schon besser aus.

Noch ein paar Dinge:
1. das macht den Code zwar nicht weniger korrekt aber wenn Du keinen Obfuscation-Wettbewerb gewinnen willst, dann gib den Variablen sinnvolle Namen :)
2. wenn nichts anderes gefordert ist, würde ich den Konstruktor entfernen: ein neuer Fernseher steht auf Kanal 0, hat Lautstärke 0 und ist ausgeschaltet.
3. "Eine Änderung von Lautstärke und Programm soll nur dann möglich sein, wenn der Fernseher eingeschaltet ist." - das würde für mich bedeuten, dass setVolume im ausgeschalteten Zustand überhaupt keine Änderung vornimmt, insbesondere also auch die Lautstärke nicht auf 0 setzt. Analog für Kanal.

Zu 3.: wenn sich der Fernseher die letzte Lautstärke den letzten Kanal nicht merken soll, dann wäre das etwas, was beim Ausschalten berücksichtigt werden müsste: sobald ich den Fernseher ausschalte, ist der Kanal 0 und die Lautstärke 0.
 

Neue Themen


Oben