Probleme mit dem zugriff auf die Objekte



  • Hallo,
    ich bins mal wieder der etwas Hilfe benötigt.

    Und zwar folgendes:

    Die Aufgabe lautet.
    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 sowie 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 Klasseauf die Felder zu. Das gilt auch für die
    Ausgabe der Werte.

    mein ertser Versuch

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication24
    {
    class Fernseher
    {

    bool fernSeher;

    public void Anmachen(bool einschalten)
    {
    int wert;

    Console.WriteLine(" Schalten Sie Ihr TV-Gerät mit der [1] ein.");
    wert = Convert.ToInt32(Console.ReadLine());

    if (wert == 1)
    fernSeher = true;
    Console.Write(" Ihr TV-Gerät ist nun eingeschaltet.");

    }

    public void Programwahl(int ausWahl)
    {
    int ProgramWahl = 0;

    if (fernSeher == true)

    while (ProgramWahl != 5)
    {

    Console.WriteLine("Wählen Sie Ihr Programm von 1 bis 5 aus");
    ProgramWahl = Convert.ToInt32(Console.ReadLine());

    switch (ProgramWahl)
    {
    case 1:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben RTL gewählt.");
    break;
    case 2:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben Sat.1 gewählt.");
    break;
    case 3:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben Pro.7 gewählt.");
    break;
    case 4:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben Vox gewählt.");
    break;
    case 5:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben DSF gewählt.");
    break;
    default:
    Console.WriteLine(" Mehr Sender stehen Ihnen Momentan nicht zur verfügung bitte haben SIe verständniss");
    break;
    }
    }

    else
    Console.WriteLine(" Bitte schalten Sie zuerst Ihr TV-Gerät ein.");

    }

    public void Lautstaerke(int ausWahl)
    {
    int Lautstaerke = 0;

    if (fernSeher == true)

    while (Lautstaerke != 5)
    {
    Console.WriteLine(" Wählen Sie ihre gewünschte Laustärke von 1 bis 5 aus.");
    Lautstaerke = Convert.ToInt32(Console.ReadLine());
    switch (Lautstaerke)
    {
    case 1:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben die Lautstärke 1 (kein Ton) gewählt");
    break;
    case 2:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben die Lautstärke 2 (leise) gewählt");
    break;
    case 3:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" SIe haben die Lautstärke 3 (Normal) gewählt");
    break;
    case 4:
    Console.Write(" Ihr TV-Gerät ist eingeschaltet");
    Console.WriteLine(" Sie haben die Lautstärke 4 (Laut) gewählt");
    break;
    default:
    Console.WriteLine(" Mehr Lautstärke halten Ihre Boxen nicht aus, bitte haben Sie verständniss");
    break;
    }
    }
    else

    Console.WriteLine(" Bitte schalten Sie zuerst Ihr TV-Gerät ein.");

    }

    class Program
    {

    static void Main(string[] args)
    {
    Fernseher groß1 = new Fernseher();

    int eingabe = 0;

    while (eingabe != 4)
    {
    Console.WriteLine("Ihr neues TV-Gerät. Was möchten Sie tun?");
    Console.WriteLine("[1] TV-Gerät einschalten");
    Console.WriteLine("[2] Lautstärke ändern");
    Console.WriteLine("[3] Programm ändern");
    Console.WriteLine("[4] TV-Gerät ausschalten");
    eingabe = Convert.ToInt32(Console.ReadLine());

    switch (eingabe)
    {
    case 1:
    // groß1.Anmachen();
    break;
    case 2:
    // groß1.Programwahl();
    break;
    case 3:
    //groß1.Lautstaerke();
    break;
    case 4:
    Console.WriteLine(" Ihr TV-Gerät ist nun aus bis Bald schönen Tag noch.");
    break;

    }
    }
    }
    }
    }
    }

    Hier meine frage dazu:
    Visual zeigt mir den Fehler( keine Überladung ) an.
    Ich kann dem nicht ganz folgen, hab doch die klassen objekte zugewiesen und eine Instanz gesetzt.

    Kann mir einer auf die Sprünge helfen bitte.



  • Rück doch bitte den Code ein und verwende die C#-Tags, damit Highlighting aktiviert wird. Dann hilft dir noch lieber jemand 🙂



  • Schau mal nach was Überladungen sind.

    Dein Problem ist, dass deine Methoden beim Aufrufen einen Wert wollen. Bsp.:

    [code="cs"]
    public void Anmachen(bool einschalten)
    {
    ...
    }
    [/code]

    Du rufst diese allerdings ohne einen Paramater auf:

    groß1.Anmachen();
    

    Richtig wäre z.B.:

    groß1.Anmachen(true);
    


  • Vielen Dank neo.
    Das Programm läuft soweit einwandfrei. 👍 👍

    Aber ich habe noch eine Frage bezüglich wiedergeben des senders bei der einstellung der Lautstärke.

    Also das heist ich möchte es noch bisl verfeinern, weil jetzt gibt es mir nur den wert wieder den ich eingegeben habe also zum beispiel" Sie haben RTL gewählt".

    Und bei der Laustärke nur die lautstärke.

    Kann ich mit einer "return" anweisung mir das so anzeigen lassen das es mir alles anzeigt?
    zb:

    Ihr TV-Gerät ist eingeschaltet und ihr aktuelles Program ist RTL bei einer Laustärke von?

    Ich habe es so versucht:

    Console.Write(" Ihr TV-Gerät ist eingeschaltet {0},{1}.",einschalten,ProgramWahl);
    

    aber das nimmt er mir nicht an sondern nur die klassenmethode wo ich es einfügen möchte.



  • jonnywhite7 schrieb:

    ...

    Sind dir Membervariablen vertraut? (Du nutzt ja auch schon eine, sollte also kein Problem sein)

    Derzeit verwendest du in den Methoden nahezu ausschließlich lokale Variablen, um aber den Stand über eine Funktion hin zu merken musst du diese auch so halten, das die anderen Methoden darauf zugreifen können. Sprich die Programmwahl und die Lautstärke wären wohl als Membervariablen auch ganz gut geeignet.

    Davon abgesehen: Du solltest Variablen und Methoden möglichst sprechend nennen. Was soll den bitte "fernSeher" für ein Name für einen Boolwert sein (Ganz davon abgesehen frage ich mich warum das S groß geschrieben ist, Fernseher ist ein Wort, bei "programmWahl" kann ich ja noch irgendwo einsehen [auch wenn ich es eher "sender" nennen würde])? Besser wäre wohl "istEingeschaltet".

    Und wenn du dann die Membervariablen auch verwendest, kannst du diese natürlich auch in den anderen Methoden verwenden (z.B. für die Ausgabe). Sofern du auf diese Werte von außerhalb lesend zugreifen können willst, könntest du Properties verwenden.

    z.B. "public IstEingeschaltet { get; private set; }"

    und dann kannst du über dein Objekt (hier "groß1" - auch ein schlechter Name), darauf zugreifen "groß1.IstEingeschaltet".


Anmelden zum Antworten