Liebe Gemeinschaft,
erneut wende ich mich an euch.
In folgender Übungsaufgabe des Buches
C# Programmieren: für Einsteiger: Der leichte Weg zum C#-Experten! (Visual Studio 2019), Michael Bonacina findet sich zum Thema "Methoden im Programm verwenden" folgende Aufgabestellung:
1.) Schreiben Sie das Programm aus Übungsaufgabe 2 in Kapitel 8 => 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| namespace Bonacina_8_2 { class Bike { public string Type; public string Color; public int FrameSize; public int ImpellerSize; }
internal class Program { static void Main(string[] args) { Bike myBike = new Bike();
System.Console.Write("Please type in your type of the bike: "); myBike.Type = System.Console.ReadLine(); System.Console.Write("Please type in your color of the bike: "); myBike.Color = System.Console.ReadLine(); System.Console.Write("Please type in your frame size of the bike: "); myBike.FrameSize = int.Parse(System.Console.ReadLine()); System.Console.Write("Please type in your impeller size of the bike: "); myBike.ImpellerSize = int.Parse(System.Console.ReadLine());
System.Console.WriteLine($"The type of the bike is: {myBike.Type}"); System.Console.WriteLine($"The color of the bike is: {myBike.Color}"); System.Console.WriteLine($"The frame size of the bike is: {myBike.FrameSize}"); System.Console.WriteLine($"The impeller size of the bike is: {myBike.ImpellerSize}");
System.Console.WriteLine(System.Console.ReadKey()); } } } |
so um, dass es eine Methode verwendet, um die Attribute des Objekts auszugeben.
2.) Erstellen Sie nun auch Methoden, um die Nutzereingaben im Objekt zu speichern.
3.) Objekte lassen sich auch in Listen einfügen. Dazu ist es notwendig, anstatt eines Variablentps den Namen der entsprechenden Klasse bei der Erstellung der Liste anzugeben. Damit ist es möglich, beliebig viele Objekte aufzunehmen.
4.) Dazu soll eine Schleife entstehen, die den Anwender nach dem Durchlauf fragt, ob er fortfahren will. Die neuen Objekte für die Fahrräder müssen im Add-Befehl mit dem Schlüsselbegriff new erzeugt werden.
Bis dahin alles kein Problem, aber jetzt kam es:
5.)Die Attribute sollen mit den bereits vorhanden Methoden eingefügt werden. Dazu ist es notwendig, den Index des aktuellen Listenelements zu kennen. Zu diesem Zweck ist es sinnvoll, einen Zähler einzufügen.
6.) Die Ausgabe der Werte soll mit einer foreach Schleife erfolgen ...
Zwar weiß ich aus den Übungen mit Schleifen, was ein Zähler ist, doch hier (in einer do_while Schleife einer Liste) verknotete sich mein Gehirn. Mir wurde nicht klar, wie und wo ich den Zähler in den Code integrieren soll. Nach einem Tag des Versagens, schaute ich in die Lösung und sah einen Code, auf den ich im Leben nicht gekommen wäre, da vorher noch nie gesehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| namespace BonacinaÜbungKap9_3 { class Bike { public string Type; public string Color; public int ImpellerSize; public int FrameSize;
public void DisplayBikeObj() { System.Console.WriteLine(Type); System.Console.WriteLine(Color); System.Console.WriteLine(ImpellerSize); System.Console.WriteLine(FrameSize); }
public void setType(string typeBike) { this.Type = typeBike; }
public void setColor(string bikeColor) { this.Color = bikeColor; }
public void setImpellerSize(int customImpellerSize) { this.ImpellerSize = customImpellerSize; }
public void setFrameSize(int customFrameSize) { this.FrameSize = customFrameSize; } }
internal class Program { static void Main(string[] args) { System.Collections.Generic.List<Bike> bikes = new System.Collections.Generic.List<Bike>(); char repeat; int counter = 0;
do { bikes.Add(new Bike());
System.Console.Write("Please type in your desired type: "); bikes[counter].setType(System.Console.ReadLine());
System.Console.Write("Please type in your desired color: "); bikes[counter].setColor(System.Console.ReadLine());
System.Console.Write("Please type in your desired impeller size: "); bikes[counter].setImpellerSize(int.Parse(System.Console.ReadLine()));
System.Console.Write("Please type in your desired frame size: "); bikes[counter].setFrameSize(int.Parse(System.Console.ReadLine())); counter++;
System.Console.WriteLine("Do you wanna add one more? (y/n)"); repeat = char.Parse(System.Console.ReadLine());
} while (repeat == 'y');
foreach (Bike customBikes in bikes) { customBikes.DisplayBikeObj(); }
System.Console.ReadKey(); } } } |
C#-Quelltext
1:
| bikes[counter].setType(System.Console.ReadLine()); |
Den Zähler fand ich als ?Array? wieder? Wie kann das sein? Oder ist das kein Array? Denn nirgends wird ein Array vorher definiert. Wenn es ein Array sein soll, wieso wird das Array vorher nirgends ins Leben gerufen? Und wenn es kein Array ist, was zum Henker ist das? Das Buch geht in keiner Sekunde auf diese "Struktur" ein.
Eine weitere Frage, die sich mir im Zusammenhang stellte ist: Wenn ich diese arrayartige Struktur weg lasse, kann ich die Methoden nicht mehr über den Operator für den Memberzugriff aufrufen. Auch das ist für mich ein ungelöstes Rätsel.