C# und Objektorientiertes Programmieren (Fernsehen als Objekt)
-
Hallo an das Forum
,
ich brauche hilfe bei Objektorientieren Programmieren in C# . Ich soll ein Programm erstellen, 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. Ich muss bei der Umsetzung folgende Vorgaben beachten: -Eine Änderung von Lautstärke und Programm soll nur dann möglich sein, wenn der Fernseher eingeschaltet ist. -den Fernseher in Ihrem Programm mindestens einmal einschalten und die Lautstärke ändern sowie das Programm. Dann denn Fernseher wieder ausschalten. -nach jeder Änderung den aktuellen Zustand des Fernsehers auf der Kon- sole ausgeben.
Ich soll nur über die Methoden der Klasse auf die Felder zugreifen. Das gilt auch für die Ausgabe der Werte.
Kleine Ansatz:
public class Fernseher { public bool On { get; set; } public int Channel {get; set; } private int volume; public int Volume { get { return volume; } set { if(On) volume = value; } } public override string ToString() { return "Angeschaltet: "+On+", Kanal: "+Channel+", Lautstaerke: "+Volume; } }
Ich wäre dankbar für jeden Tipp und Hilfe..es übersteigt meine fähigkeiten als C# Anfänger.Grüße anakhha
-
Tipp: Lös das Problem selber, dann lernst du am Ende am meisten. Das Problem ist äusserst einfach sogar für Programmieranfänger. Aber wo kein Wille ist, ist auch kein Weg.
Grüssli
-
Ich weiß nicht genau womit Du Hilfe brauchst. Im Property für
Volume
prüfst Du ja schon ganz richtig ob der TV eingeschaltet ist. So machst Du das auch fürChannel
.Die Consolenausgaben erledigst Du einfach in den Settern. Das sind auch Methoden, wegen der Anforderung, dass Ausgaben nur in Methoden erfolgen dürfen.
Also ... Du hast es doch schon fast. Wo genau ist die Schwierigkeit?
-
µ schrieb:
Ich weiß nicht genau womit Du Hilfe brauchst. Im Property für
Volume
prüfst Du ja schon ganz richtig ob der TV eingeschaltet ist. So machst Du das auch fürChannel
.Die Consolenausgaben erledigst Du einfach in den Settern. Das sind auch Methoden, wegen der Anforderung, dass Ausgaben nur in Methoden erfolgen dürfen.
Also ... Du hast es doch schon fast. Wo genau ist die Schwierigkeit?
Hallo µ,
wäre es möglich das du eine Auge drauf wirfst...ich weiß garnicht ob ich in richtigen richtung gehe
:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication24 { public class TV { int On; public bool adjustOnOff(int val1) { if (On == 0) { return false; } else { this.On = val1; return true; } } private int _channel; public int Channel { get { return _channel; } set { if (On == 1) _channel = value; } } int Sound; public bool adjustSound(int val2) { if (On == 0) { return false; } else { this.Sound = val2; return true; } } } class Program { static void Main(string[] args) { TV apparat = new TV(); int eingabe = 0; // Schleife while (eingabe != 4) { Console.WriteLine("Was möchten Sie tuen?\n"); Console.WriteLine("[1] Fernseher Einschalten"); Console.WriteLine("[2] Lautstärke ändern"); Console.WriteLine("[3] Programm ändern"); Console.WriteLine("[4] Fernseher ausschalten"); eingabe = Convert.ToInt32(Console.ReadLine()); switch (eingabe) { case 1: //kann ich Methoden unter Main auch einstellen? int On = Convert.ToInt32(Console.ReadLine()); if (On == 1) { Console.WriteLine("Fernseher ist an"); } else if (On != 0) { Console.WriteLine("Fernseher ist aus"); } break; case 2: //kann ich Methoden unter Main auch einstellen? int Sound = Convert.ToInt32(Console.ReadLine()); if(TV.adjustSound()) { Console.WriteLine("Lautstärke würde geändert: {0}", Sound); } else { Console.WriteLine("Fernseher ist aus"); } break; case 3: // break; case 4: // break; } } } } }
-
Warum hast du deinen ersten Ansatz verworfen? Der war weitaus besser als der jetzige. Warum z.B. nimmst du anstatt int nicht eher Bool fuer deine On/Off Property, das ist kein C sondern C#, da kennt man schon sowas wie boolsche Werte.
-
Hallo Firefighter,
ja das erste Gerüst gefehlt mir auch besser, aber ich hänge an den Methoden wie ich die einzel Funktion aufrufen kann, zb. (siehe switch), so das bei 1 = Fernseher an ist, 0 = Fernseher aus ist. Volume und Kannal einstellbar ist, zb. als int Zahl und das nach jedem änderung (zb. Vol. und Kannal) das jetzige stand ausgegeben wird...
-
Du hast in deinem ersten Geruest eine Property "On", dort hast du einen Setter. Nun setzt doch einfach die Property von deinem TV-Objekt auf True und gut ist.
-
Firefighter schrieb:
Du hast in deinem ersten Geruest eine Property "On", dort hast du einen Setter. Nun setzt doch einfach die Property von deinem TV-Objekt auf True und gut ist.
Danke für deine schnelle Antwort. Aber ist es nicht so das wenn du set machst, dann ist er immer ON (eingeschaltet)? Das ist ja halt mein Problem, er soll auch mal aus sein. Erst wenn ich per Eingabe im Einschalte sollen Volume und Kannal ändern funktionieren.
-
anakhha schrieb:
Firefighter schrieb:
Du hast in deinem ersten Geruest eine Property "On", dort hast du einen Setter. Nun setzt doch einfach die Property von deinem TV-Objekt auf True und gut ist.
Danke für deine schnelle Antwort. Aber ist es nicht so das wenn du set machst, dann ist er immer ON (eingeschaltet)? Das ist ja halt mein Problem, er soll auch mal aus sein. Erst wenn ich per Eingabe im Einschalte sollen Volume und Kannal ändern funktionieren.
Das ist korrekt. Dafuer bist du verantwortlich. Du musst jetzt die passende Logik schreiben die das Geraet auch mal wieder auf On = false setzt.
-
Hmm...also wäre für
public bool On { get; set; }
zb. sowas möglich?
static void Main(string[] args) { TV apparat = new TV(); int wert = Convert.ToInt32(Console.ReadLine()); if (wert == 1) { apparat.On = true; Console.WriteLine("Fernseher ist an"); } else apparat.On = false; Console.WriteLine("Fernseher ist aus");
Und bei Kannal und Lautstärke kann ich halt mit der simple Anweisung if (On) oder (!On) schon mal vorausetzung stellen das der Fernseher AN sein muss.
-
Ja das geht.