Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ein Konstruktor erstellt ein Objekt. Es gibt Default-Konstruktoren(leer) und man kann eigene Konstruktoren coden (mit Werten). Wenn man keine KOnstruktoren anlegt, dann legt java automatisch einen default-Konstruktor an.
Soll wohl nicht schlecht sein. Evtl. ist es sinnvoll erst das eine und dann die anderen Kurse zu bearbeiten. Ich kann mir nicht vorstellen, dass sich die didaktischen Vorgehensweisen gut mischen lassen.
Ein Konstruktor erstellt ein Objekt. Es gibt Default-Konstruktoren(leer) und man kann eigene Konstruktoren coden (mit Werten). Wenn man keine KOnstruktoren anlegt, dann legt java automatisch einen default-Konstruktor an.
Haben hier zwei verschiedene Konstruktoren Sinn, wenn man zwei unabhängige Variablen hat?
Ist es sinnvoll, eine Initiale Lautstärke übergeben zu können?
Na dann überleg dir doch mal, was bei der Erzeugung deines Fernseher-Objekts initialisiert werden könnte/müsste. Die Klasse Fernseher ist sozusagen der Bauplan und mit dem Konstruktor wird ein Fernseher produziert.
Das erste was klar ist, das Ding ist noch ausgeschaltet.
Du kaufst es und schaltest es ein. Was wird i.d.R. für ein Programm angezeigt?
Welche Lautstärke hat das Ding, wenn du es zum ersten Mal einschaltest?
Na dann überleg dir doch mal, was bei der Erzeugung deines Fernseher-Objekts initialisiert werden könnte/müsste. Die Klasse Fernseher ist sozusagen der Bauplan und mit dem Konstruktor wird ein Fernseher produziert.
Das erste was klar ist, das Ding ist noch ausgeschaltet.
Du kaufst es und schaltest es ein. Was wird i.d.R. für ein Programm angezeigt?
Welche Lautstärke hat das Ding, wenn du es zum ersten Mal einschaltest?
public class TV {
private int volume = 30;
private boolean switchedOn;
}
In der Klasse ist kein Konstruktor definiert, daher spendiert Java der Klasse einen Standardkonstruktor. Wenn Du mit new TV() ein neues TV-Objekt erzeugst, werden das volume-Attribut auf 30 und das switchedOn-Attribut auf false gesetzt.
Den gleichen Effekt erreichst Du durch Implementierung des Standardkonstruktors:
Java:
public class TV {
private int volume;
private boolean switchedOn;
public TV() {
volume = 30;
}
}
Den würdest Du benötigen, falls Du einen weiteren Konstruktor anbieten möchtest, der z. B. die Lautstärke entgegennimmt, die beim "Bauen des Fernsehers" eingestellt werden soll:
Java:
public class TV {
private int volume;
private boolean switchedOn;
public TV() {
volume = 30;
}
public TV(int volume) {
this.volume = volume;
}
}
also was genau soll ich jetzt ändern? Was denkt ihr? Hier nochmals die Aufgabe:
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.
===
der Code sieht bis jetzt so aus:
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); // gibt leider keine richtige Ausgabe aus. D.h. TV ist nicht als ausgeschlatet zu sehen.
}
}
Java:
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;
}
return lautstaerke;
}
int setProgramm (int setProgramm) {
if (status == true) {
programm = setProgramm;
}
return programm;
}
boolean setStatus(boolean setS) {
if (setS == true) {
status = setS;
}
return status;
}
}
Konstruktor verbessern, else-Zweige weglassen, was noch? Ist die aufgabenstellung denn noch nicht erfüllt?
Und dann ist es aus meiner Sicht wichtig, dass du dir Gedanken über die Lesbarkeit machst. Code sollte sich selbst erklären.
Eine wichtige Sache ist da das Verständnis der sogenannten Problemdomain. Aber das sollte ja gegeben sein.
Also kann man sich an der Sprache orientieren:
Wie läuft das bei euch? Dein Vater fragt Dich: "Gib mir den Status vom Fernseher" und Du antwortest: "Ja"?
Ich kenne das etwas anders: "Ist der Fernseher an?" "Ja".
Da ist die Frage und die Antwort verständlich.
Siehe dazu z.B. temi in #34 und auch etwas #60.
Man kann natürlich auch Stati definieren. FernseherStatus könnte sein: AN, AUS, AN_KEIN_EINGANG, AN_TON_AUS, ...
Das wäre dann auch verständlich bei einer Frage nach dem Status (so man das möchte) ... aber halt kein ja/nein mehr als Antwort.