Fernseher-Aufgabe (Methoden, Klassen und Objekte)

Diskutiere Fernseher-Aufgabe (Methoden, Klassen und Objekte) im Java Basics - Anfänger-Themen Bereich.
C

Codix

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.


Java:
public class Tv {
//Methode ausgabe festlegen
     static void ausgabe(Fernseher fernseher ) {
// mit einer if-Schleife & getStatus (für das einschalten des fernsehers)
            if (fernseher.getStatus() == true) {
//ausgabe für den fernseher (ob er an oder aus ist)
                System.out.println("Der Fernseher ist an.");
            }else {
                System.out.println("Der Fernseher ist aus.");
            }
    //ausgabe für das Programm       
            System.out.println("Sie haben Programm: " + fernseher.getProgramm());
    //ausgabe für die Lautstaerke
            System.out.println("Es ist Lautstaerke " + fernseher.getLautstaerke() + " eingestellt.");     

        }
    
    //Hauptklasse main festgelegt 
    //MERKE: in der Hauptmethode werden die Zustände der Objekte verändert.
     //z.B. Programm umgeschaltet oder Lautstaerke aufgedreht, etc.
     public static void main(String[] args) {
// Konstruktor verwendet
// Das eigentliche Erzeugen der Instanz erfolgt dann mit dem Operator new.
// Dahinter geben Sie den Namen der Klasse und die runden Klammern () an.
// Die Referenz, die der Operator new liefert, weisen Sie mit dem Zuweisungsoperator der Variablen vom Typ der Klasse zu. Dabei gibt es keine Besonderheiten.
         Fernseher fernseher = new Fernseher();

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

        // Zustand ändern & ausgeben
        
        //erst wird der Fernseher eingeschalten
        fernseher.setStatus(true);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);
        
        //jetzt ändern man die Lautstärke auf 5
        fernseher.setProgramm(1);
        fernseher.setLautstaerke(10);
        ausgabe(fernseher);
        
        //jetzt ändern man das Programm auf 4
        fernseher.setProgramm(6);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);

        //jetzt ändern man die Programm auf 5
        fernseher.setProgramm(7);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);
        
        //jetzt ändern man die Programm auf 12
        fernseher.setLautstaerke(15);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);
              
        //jetzt schaltet man den Fernseher aus
        fernseher.setStatus(false);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);
    }

}

// andere Klasse Fernseher im gleichen Packet und im gleichen Projekt
public class Fernseher {
    int lautstaerke, programm;
    boolean status;

    //methode init muss angewendet werden, weil s. Beschreibung:
    //wir weisen den Objekten Anfangswerte zu.
    //init = In der Programmierung die Zuweisung eines
    //Initial- oder Anfangswertes zu einem Objekt oder einer Variablen
    void init(int lautstaerke, int programm, boolean status) {
      
    }

    boolean getStatus() {
        return status;
    }

    int getLautstaerke() {
        return lautstaerke;
    }

    int getProgramm() {
        return programm;
    }

    int setLautstaerke(int setLautstaerke){

        if (status == true) {
            lautstaerke = setLautstaerke;
        } else {
            lautstaerke = 0;
        }
        return lautstaerke;

    }

    int setProgramm (int setProgramm) {
        if (status == true) {
        programm = setProgramm;
        } else {
            programm = 0;
        }
        return programm;
    }

    boolean setStatus(boolean setS) {
        if (setS == true) {
            status = setS;
        } else {
            status = setS;
        }
        return status;
    }
}
Frage: ist die Aufgabe hiermit erfolgreich gelöst? Bitte um Antworten. Danke im Voraus.
 
H

httpdigest

ist die Aufgabe hiermit erfolgreich gelöst?
Nein. In der Aufgabenstellung ist doch gefordert, dass sowohl Programm als auch Lautstärke nur im eingeschalteten Zustand geändert werden können.
Du aber setzt beides einfach auf 0 (egal, welchen Wert sie vorher hatten), wenn der Fernseher aus ist und jemand die Lautstärke bzw. das Programm ändern möchte. Auf 0 Setzen ist ja auch eine Änderungen (sofern der vorherige Wert nicht auch 0 war).
 
C

Codix

Nein. In der Aufgabenstellung ist doch gefordert, dass sowohl Programm als auch Lautstärke nur im eingeschalteten Zustand geändert werden können.
Du aber setzt beides einfach auf 0 (egal, welchen Wert sie vorher hatten), wenn der Fernseher aus ist und jemand die Lautstärke bzw. das Programm ändern möchte. Auf 0 Setzen ist ja auch eine Änderungen (sofern der vorherige Wert nicht auch 0 war).
aber ich regel doch im code, ob der TV an oder aus ist. Erst wenn er an ist kann die Lautstärke & das Programm geändert werden. Und wir gucken jedes mal ob der TV auch an ist, erst dann können wir die Lautstärke & das Programm einstellen.

Java:
public class Tv {
//Methode ausgabe festlegen
     static void ausgabe(Fernseher fernseher ) {
// mit einer if-Schleife & getStatus (für das einschalten des fernsehers)
            if (fernseher.getStatus() == true) {
//ausgabe für den fernseher (ob er an oder aus ist)
                System.out.println("Der Fernseher ist an.");
            }else {
                System.out.println("Der Fernseher ist aus.");
            }
Java:
 //erst wird der Fernseher eingeschalten
        fernseher.setStatus(true);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);
wie würdest du den Code ändern @httpdigest
 
H

httpdigest

Bitte lies noch einmal, was ich oben geschrieben habe.
Vielleicht testest du dann mal folgendes:
Java:
Fernseher fernseher = new Fernseher();
fernseher.setStatus(true);
fernseher.setProgramm(4);
fernseher.setStatus(false);
fernseher.setProgramm(5); // <- hier VERÄNDERST du das Programm auf 0, obwohl der Fernseher AUS ist!
System.out.println(fernseher.getProgramm()); // <- sollte 4 ausgeben, gibt aber 0 aus!
 
C

Codix

Bitte lies noch einmal, was ich oben geschrieben habe.
Vielleicht testest du dann mal folgendes:
Java:
Fernseher fernseher = new Fernseher();
fernseher.setStatus(true);
fernseher.setProgramm(4);
fernseher.setStatus(false);
fernseher.setProgramm(5); // <- hier VERÄNDERST du das Programm auf 0, obwohl der Fernseher AUS ist!
System.out.println(fernseher.getProgramm()); // <- sollte 4 ausgeben, gibt aber 0 aus!
???

Java:
Fernseher fernseher = new Fernseher();
fernseher.setStatus(true);   //TV ist an 
fernseher.setProgramm(4);
fernseher.setStatus(false);
fernseher.setProgramm(5); // <- (hier verändern wir das Programm auf 5 & der TV ist an   "fernseher.setStatus(true);"  )
System.out.println(fernseher.getProgramm());    //gibt 5 aus
[/QUOTE]
 
H

httpdigest

Willst du mich verarschen? Hast du den Testcode von mir denn überhaupt mal ausgeführt?
Nach dem Aufruf von setProgramm(4); steht ganz eindeutig ein setStatus(false), um den Fernseher wieder auszuschalten.
Und der nachfolgende Aufruf von setProgramm(5) bei dem gerade ausgeschaltenen Fernseher, verändert das Programm effektiv auf 0.
 
C

Codix

Willst du mich verarschen? Hast du den Testcode von mir denn überhaupt mal ausgeführt?
Nach dem Aufruf von setProgramm(4); steht ganz eindeutig ein setStatus(false), um den Fernseher wieder auszuschalten.
Und der nachfolgende Aufruf von setProgramm(5) bei dem gerade ausgeschaltenen Fernseher, verändert das Programm effektiv auf 0.
wo finde ich bitte die Codestelle, die du gerade beschreibst? Sie ist nicht aus dem obigen Quellcode!
 
C

Codix

Java:
Fernseher fernseher = new Fernseher();

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

        // Zustand ändern & ausgeben
        
        //erst wird der Fernseher eingeschalten
        fernseher.setStatus(true);
        //gibt in der Konsole das ergebnis aus
        ausgabe(fernseher);
        
        //jetzt ändern man die Lautstärke auf 5
        fernseher.setProgramm(2);
        fernseher.setLautstaerke(10);
        ausgabe(fernseher);
hier wird doch erst geprüft, ob der TV an oder aus ist. Erst wenn er an ist switchen wir die Programme und die Lautstärke wird verändert :)
 
H

httpdigest

Bitte lies dir noch einmal meinen ersten Post #2 durch und dann lies ihn bitte noch einmal durch und dann noch einmal, bis du verstanden hast, was ich damit aussagen wollte. Dann führe bitte den Testcode in meinem Post #4 aus.
hier wird doch erst geprüft, ob der TV an oder aus ist. Erst wenn er an ist switchen wir die Programme und die Lautstärke wird verändert :)
Du prüfst dort überhaupt nichts. Dein Code schaltet den Fernseher an, ja. Und dann setzt es das Programm und die Lautstärke, ja. Aber dein Code testet nicht, was passiert, wenn du Programm und Lautstärke setzt, wenn der Fernseher aus ist!
Diese Fälle sollen ja gerade implementiert werden und werden sicherlich bei der Abnahme der Aufgabe auch so geprüft.
 
C

Codix

Bitte lies dir noch einmal meinen ersten Post #2 durch und dann lies ihn bitte noch einmal durch und dann noch einmal, bis du verstanden hast, was ich damit aussagen wollte. Dann führe bitte den Testcode in meinem Post #4 aus.

Du prüfst dort überhaupt nichts. Dein Code schaltet den Fernseher an, ja. Und dann setzt es das Programm und die Lautstärke, ja. Aber dein Code testet nicht, was passiert, wenn du Programm und Lautstärke setzt, wenn der Fernseher aus ist!
@
Du prüfst dort überhaupt nichts. Dein Code schaltet den Fernseher an, ja. Und dann setzt es das Programm und die Lautstärke, ja. Aber dein Code testet nicht, was passiert, wenn du Programm und Lautstärke setzt, wenn der Fernseher aus ist!
=> aber es kann nichts passieren, weil wir im if/else statement das so gesetzt haben ,dass das Umschalten/Verändern der Lautstärke nur funkt, wenn TV an ist. Warum sollen wir nochmals testen, was passiert, wenn TV aus ist? Es kann ja nichts passieren, weil (s. statement in der vorigen Zeile :) )
 
H

httpdigest

Bitte lies dir noch einmal meinen ersten Post #2 durch und dann lies ihn bitte noch einmal durch und dann noch einmal, bis du verstanden hast, was ich damit aussagen wollte. Dann führe bitte den Testcode in meinem Post #4 aus.
 
C

Codix

Java:
ernseher fernseher = new Fernseher();
fernseher.setStatus(true);
fernseher.setProgramm(4);
fernseher.setStatus(false);
fernseher.setProgramm(5); // <- hier VERÄNDERST du das Programm auf 0, obwohl der Fernseher AUS ist!
System.out.println(fernseher.getProgramm()); // <- sollte 4 ausgeben, gibt aber 0 aus!
natürlich gibt er hier 0 aus, weil fernseher.setStatus(false) ist.
Was willst du denn, das welcher Wert ausgegeben wird, wenn der TV aus ist? Nicht 0, sondern ???
 
H

httpdigest

natürlich gibt er hier 0 aus, weil fernseher.setStatus(false) ist.
Diese Schlussfolgerung kann ich nicht nachvollziehen. getProgramm() soll deiner Meinung nach also immer 0 ausgeben, wenn der Fernseher aus ist? Dann teste mal folgendes:
Java:
Fernseher fernseher = new Fernseher();
fernseher.setStatus(true);
fernseher.setProgramm(4);
fernseher.setStatus(false);
System.out.println(fernseher.getProgramm());
Was willst du denn, das welcher Wert ausgegeben wird, wenn der TV aus ist? Nicht 0, sondern ???
Wie ich geschrieben habe: 4. Der initial im eingeschalteten Zustand per setProgramm(4) gesetzte Wert sollte sich im ausgeschalteten Zustand nicht ändern lassen und eben solange 4 bleiben, bis das Programm im eingeschalteten Zustand wieder geändert wird.
 
H

httpdigest

Alternativ kannst du das Fehlverhalten auch mit folgendem Code testen:
Java:
Fernseher fernseher = new Fernseher();
fernseher.setStatus(true); // <- Fernseher anschalten
fernseher.setProgramm(4); // <- Programm auf 4 wechseln
fernseher.setStatus(false); // <- Fernseher ausschalten
fernseher.setProgramm(5); // <- Versuchen, Programm auf 5 zu wechseln (wird 0 werden)
fernseher.setStatus(true); // <- Fernseher anschalten
System.out.println(fernseher.getProgramm()); // <- gibt immer noch 0 aus, sollte aber wohl 4 sein.
 
C

Codix

Diese Schlussfolgerung kann ich nicht nachvollziehen. getProgramm() soll deiner Meinung nach also immer 0 ausgeben, wenn der Fernseher aus ist? Dann teste mal folgendes:
Java:
Fernseher fernseher = new Fernseher();
fernseher.setStatus(true);
fernseher.setProgramm(4);
fernseher.setStatus(false);
System.out.println(fernseher.getProgramm());

Wie ich geschrieben habe: 4. Der initial im eingeschalteten Zustand per setProgramm(4) gesetzte Wert sollte sich im ausgeschalteten Zustand nicht ändern lassen und eben solange 4 bleiben, bis das Programm im eingeschalteten Zustand wieder geändert wird.
Warum soll der TV im ausgeschalteten Modus Programm 4 anzeigen? Überleg doch mal logisch. Wie soll das gehen?
 
H

httpdigest

Eine einfache Programmieraufgabe zu befolgen, hat in erster Linie nichts mit Logik zu tun, sondern damit, eine Aufgabenstellung zu befolgen. Da in der Aufgabenstellung anscheinend nirgendwo steht, dass getProgramm() im ausgeschalteten Zustand einfach mal 0 zurückgibt, sollte es das auch nicht tun (zumal es ja auch nicht deswegen 0 zurückliefert, weil der Fernseher aus ist, sondern, weil du im ausgeschalteten Zustand bei setProgramm() einfach mal 0 zuweist). Wohl aber steht in der Aufgabenstellung, dass sich das Programm und die Lautstärker nicht ändern dürfen, wenn der Fernseher aus ist. Genau das setzt du aber eben nicht um. Du setzt im else-Fall in setProgramm() und setLautstärke() die entsprechenden Variablen einfach auf 0.
 
C

Codix

Eine einfache Programmieraufgabe zu befolgen, hat in erster Linie nichts mit Logik zu tun, sondern damit, eine Aufgabenstellung zu befolgen. Da in der Aufgabenstellung anscheinend nirgendwo steht, dass getProgramm() im ausgeschalteten Zustand einfach mal 0 zurückgibt, sollte es das auch nicht tun (zumal es ja auch nicht deswegen 0 zurückliefert, weil der Fernseher aus ist, sondern, weil du im ausgeschalteten Zustand bei setProgramm() einfach mal 0 zuweist). Wohl aber steht in der Aufgabenstellung, dass sich das Programm und die Lautstärker nicht ändern dürfen, wenn der Fernseher aus ist. Genau das setzt du aber eben nicht um. Du setzt im else-Fall in setProgramm() und setLautstärke() die entsprechenden Variablen einfach auf 0.

Wohl aber steht in der Aufgabenstellung, dass sich das Programm und die Lautstärker nicht ändern dürfen, wenn der Fernseher aus ist. Genau das setzt du aber eben nicht um. Du setzt im else-Fall in setProgramm() und setLautstärke() die entsprechenden Variablen einfach auf 0.

Damit ist gemeint, dass der Wert im ausgeschalteten Modus konstant 0 bleibt und nicht verändert werden darf.

Java:
if (status == true) {
            lautstaerke = setLautstaerke;
        } else {
            lautstaerke = 0;
        }
        return lautstaerke;

    }

    int setProgramm (int setProgramm) {
        if (status == true) {
        programm = setProgramm;
        } else {
            programm = 0;
        }
        return programm;
auf welchen Wert oder Aussage sollen wir die Lautstärke & Programm im ausgeschalteten Modus einstellen. else { lautstaerke = ? }
 
H

httpdigest

auf welchen Wert oder Aussage sollen wir die Lautstärke & Programm im ausgeschalteten Modus einstellen. else { lautstaerke = ? }
Auf gar nichts. Du brauchst hier einfach keinen else-Fall und keine Zuweisung im else-Fall.
Ich z.B. bin ein Freund von "early-out", also:
Java:
public void setProgramm(int programm) {
  if (!this.status)
    return; // <- Methodenausführung hier beenden
  this.programm = programm;
}
 
C

Codix

Eine Änderung von Lautstärke und Programm soll nur dann möglich sein, wenn der Fernseher eingeschaltet ist.

d.h. dass es einen neutralen Wert geben muss, wenn der TV ausgeschaltet ist. Einen neutralen Wert, der auf den ausgeschalteten Modus hinweist und nicht verändert werden darf. 0.
 
H

httpdigest

d.h. dass es einen neutralen Wert geben muss, wenn der TV ausgeschaltet ist. Einen neutralen Wert, der auf den ausgeschalteten Modus hinweist und nicht verändert werden darf. 0.
Nein. Es heisst nur, dass eben der aktuelle Wert im ausgeschalteten Zustand nicht geändert werden darf. Nicht auf 0, und auch nicht auf sonst einen anderen Wert.
 
Thema: 

Fernseher-Aufgabe (Methoden, Klassen und Objekte)

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben