Laden...

Wie Objekte mit einem Index zu versehen und abrufen?

Erstellt von jenny_csharp vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.047 Views
J
jenny_csharp Themenstarter:in
7 Beiträge seit 2020
vor 4 Jahren
Wie Objekte mit einem Index zu versehen und abrufen?

Hallo zusammen,

gibt es die Möglichkeit Objekte mit einem Index zu versehen und dann abzurufen? Ich habe ein wenig gegoogelt, aber da kam als Antwort immer, dass man einfach ein Array oder eine Liste verwenden soll. Ich würde aber gerne wissen, ob sowas auch mit einem Objekt möglich ist.
Ich würde gerne mehrere Objekte erstellen, z.B. Fahrrad

F

ahrrad fahrrad1 = new Fahrrad();
Fahrrad fahrrad2 = new Fahrrad();
Fahrrad fahrrad3 = new Fahrrad();
Fahrrad fahrrad4 = new Fahrrad()

;

Und diese Objekte würde ich gerne mit einem Index abrufen, z.B. fahrrad_
Wie funktioniert sowas?
Und kann man auch die Anzahl der erstellten Objekte abrufen? z.B. fahrrad.count ?

Ich verwende folgenden Quellcode, der aber nicht funktioniert.

using System;

namespace Kapitel8_OOP_Übungsaufgabe_S102
{
    class Fahrrad
    {
        public int nummer;
        public string typ;
        public double preis;
        public string farbe;

    }
    class Program
    {
        static void Main(string[] args)
        {
            Fahrrad fahrrad1 = new Fahrrad();
            fahrrad1.nummer = 1;
            fahrrad1.typ = "Cube Nature";
            fahrrad1.preis = 490.99;
            fahrrad1.farbe = "grün";

            Fahrrad fahrrad2 = new Fahrrad();
            fahrrad2.nummer = 2;
            fahrrad2.typ = "Radon Scart";
            fahrrad2.preis = 699.99;
            fahrrad2.farbe = "blau";

            Fahrrad fahrrad3 = new Fahrrad();
            fahrrad3.nummer = 3;
            fahrrad3.typ = "Radon ZR Race";
            fahrrad3.preis = 990;
            fahrrad3.farbe = "schwarz";

            for (int i = 1;i<4;i++)
            {
                Console.WriteLine(Fahrrad(i).nummer);
                Console.WriteLine(Fahrrad[i].typ);
                Console.WriteLine(Fahrrad[i].preis);
                Console.WriteLine(Fahrrad[i].farbe);
            }
        }
    }
}

lg

16.806 Beiträge seit 2008
vor 4 Jahren

Hallo,

Du bist ja hier um Hilfe zu bekommen, daher wäre es super, wenn Du Dich auch an [Hinweis] Wie poste ich richtig? halten würdest 👍
Und dazu gehört, dass Du zum Beispiel den Code nicht einfach rein klatscht, sondern den Code in die Tags passt, sodass potentieller Helfer sich nicht mit unformatiertem Plaintext rumschlagen müssen.

Danke 😉

--
Letzten Endes sprichst Du aber von Arrays.
Arrays gehören zu den absoluten Grundlagen von Programmiersprachen, auch in C#.

Meistens ist das sooo Grundlagenbehaftet, dass das in den Schulklassen in der Regel bereits in der ersten Stunde behandelt wird.
Daher leg ich Dir mal [FAQ] Wie finde ich den Einstieg in C#? nahe.

ob sowas auch mit einem Objekt möglich

Sobald Du verstanden hast, was ein Objekt und was ein Array ist wirst Du merken, dass das mit einem Objekt so gar nicht funkionieren kann - sondern eben mit Arrays und Listen.
_ ist quasi der Zugriff auf ein bestimmtes Element anhand des Index i in einem Array - das kann mit einem Objekt so gar nicht funktionieren.

1
124 Beiträge seit 2012
vor 4 Jahren

Nochmal eben als Anmerkung, dass dein Code oben auch noch weitere Fehler enthält.

Du erstellst zwar 4 Fahrräder aber überschreibst immer die Eigenschaften des Fahrrad1.

J
jenny_csharp Themenstarter:in
7 Beiträge seit 2020
vor 4 Jahren

@Abt
Alles klar, sorry. Beim nächsten Mal verwend ich Tags für den Code!
Ich arbeite momentan ein C# Grundlagen Buch von vorne bis hinten durch und Arrays und Listen hab ich bereits hinter mir. Ich weiß, dass es damit auch möglich ist. Ich wollte eben interessenshalber nur nachfragen, ob man das von mir genannte Beispiel auch mit Objekten und einem Index lösen kann.

@Thomas
Ja richtig, der Code sollte natürlich folgendermaßen lauten:
Habe es im Topicthread geändert!

T
2.219 Beiträge seit 2008
vor 4 Jahren

Und nutzte bitte auch die Einrückungen.
So ist es echt ein Krampf den Code zu lesen 😦
Auch wäre es sinnvoller gewesen den Startbeitrag anzupassen anstelle den angepassten nochmal in einem eigenen Kommentar einzufügen.
Bitte bearbeite den Startbeitrag, liest sich dann für alle angenehmer.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

190 Beiträge seit 2012
vor 4 Jahren
  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

J
jenny_csharp Themenstarter:in
7 Beiträge seit 2020
vor 4 Jahren

Ich habs jetzt in einer neuen Übungsaufgabe über Umwege gelöst. War zwar nicht genau das, was ich ursprünglich vor hatte, aber es erfüllt den selben Zweck. Ich habe nämlich davor nicht gewusst, dass man Objekte auch zu Listen hinzufügen kann. Somit habe ich quasi einen Kompromiss gefunden. Falls es jemanden interessiert, hier der Code:


using System;
using System.Collections.Generic;

namespace Uebungsbeispiel1_S._120
{
    // Klasse Fahrrad wird erstellt
    class Fahrrad
    {
        // Membervariablen der Klasse Fahrrad werden deklariert
        public int laufrad;
        public int rahmenhoehe;
        public string farbe;
        public string fahrradtyp;

        // Methode innerhalb der Klasse Fahrrad wird erstellt
        public void memberAusgeben()
        {
            Console.WriteLine("Laufrad: " + this.laufrad);
            Console.WriteLine("Rahmenhoehe: " + this.rahmenhoehe);
            Console.WriteLine("Farbe: " + this.farbe);
            Console.WriteLine("Fahrradtyp: " + this.fahrradtyp);
        }

        // Methode setLaufrad wird erstellt
        public void setLaufrad(int laufrad)
        {
            this.laufrad = laufrad;
        }

        // Methode setRahmenhoehe wird erstellt
        public void setRahmenhoehe(int rahmenhoehe)
        {
            this.rahmenhoehe = rahmenhoehe;
        }

        // Methode setFarbe wird erstellt
        public void setFarbe(string farbe)
        {
            this.farbe = farbe;
        }

        // Methode setFahrradtyp wird erstellt
        public void setFahrradtyp(string fahrradtyp)
        {
            this.fahrradtyp = fahrradtyp;
        }




    }

    class Program
    {
        static void Main(string[] args)
        {
            // Liste mit Objekten der Klasse Fahrrad wird erzeugt
            List<Fahrrad> Fahrraeder = new List<Fahrrad>();

            char weiter = 'j';
            int zaehler = 0;

            while(weiter == 'j')
            {
                // Ein Objekt der Klasse Fahrrad wird zur Liste Fahrraeder hinzugefuegt
                Fahrraeder.Add(new Fahrrad());

                Console.WriteLine("Geben Sie die Laufradgroesse ein:");
                Fahrraeder[zaehler].setLaufrad(int.Parse(Console.ReadLine()));

                Console.WriteLine("Geben Sie die Rahmenhoehe ein:");
                Fahrraeder[zaehler].setRahmenhoehe(int.Parse(Console.ReadLine()));

                Console.WriteLine("Geben Sie die Farbe ein:");
                Fahrraeder[zaehler].setFarbe(Console.ReadLine());

                Console.WriteLine("Geben Sie den Fahrradtyp ein:");
                Fahrraeder[zaehler].setFahrradtyp(Console.ReadLine());

                zaehler++;

                Console.WriteLine("Wollen Sie ein weiteres Fahrrad erstellen?");
                weiter = char.Parse(Console.ReadLine());

            }

            // Alle Objekte in der Liste werden abgerufen
            foreach(Fahrrad f in Fahrraeder)
            {
                // Jedes Objekt in der Liste gibt seine Membervariablen aus
                f.memberAusgeben();
            }

            // Anzahl gespeicherter Objekte wird ausgegeben
            Console.WriteLine("Fahrraeder Count: " + Fahrraeder.Count);

        }
    }
}

T
2.219 Beiträge seit 2008
vor 4 Jahren

Hier ein paar Verbesserungsvorschläge.

1.Stelle die public Felder auf Eigenschaften um.
2.Die set* Methoden können raus, dafür hat C# die Eigenschaften!
3.In deiner Klasse Program sollte die Liste fahrraeder heißen, hier bitte mal die Doku prüfen.
4.Du brauchst keinen char zum prüfen ob die Schleife abgebrochen werden soll. Hier kannst du direkt den String von ReadLine entgegennehmen und prüfen!
5.Die Parse Methoden werden bei Falscheingaben immer knallen, nutzt dafür TryParse mit Prüfung auf den Rückgabewert um zu schauen ob die Eingabe gültig ist.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.