URL: https://www.overclockers.at/coding-stuff/c_oop_objekte_dynamisch_benamseln_212356/page_1 - zur Vollversion wechseln!
Hiho.
Hab eine Frage bezüglich C# und Objekten. Folgendes, ich hab Klassen Huhn und Schaf. Die sollen auf einer Wiese rumlaufen und haben bestimmte Werte (Pos-x, Pos-y, Hunger, ...) aber ich will das der User eingeben kann wie viele Schafe er gern hätte, Parameter bekommen sie eh per Zufall.
Also quasi User sagt "Gib mir 5 Schafe" und er erzeugt die Objekte wie folgend:
Code:schaf dolly1 = new schaf(); schaf dolly2 = new schaf(); ... schaf dolly5 = new schaf();
naja falls ich das richtig verstanden hab am besten gleich mit array.
n=anzahl der schafe
schleife .. i=0....i->n.
schafe["dolly" + i]=new schaf();
end
Dafuer gibt es entsprechende Datenstrukturen, wie z. B. Arrays oder Vektoren. Diese kannst du wohl auch in C# mit Referenzdatentypen befuellen.
In manchen Sprachen kann man (neue) Variablennamen dynamisch aus anderen Variablen zusammensetzen (Indirektion), das ist aber ziemlich dreckig.
Er will ja nur eine dynamische Liste.
Code:List<Schaf> meineSchafe = new List<Schaf>(); // ... lese anzahlSchafe vom User for (int i = 0; i < anzahlSchafe; i++) meineSchafe.Add(new Schaf());
Code:foreach (Schaf schaf in meineSchafe) { if(schaf.Alter > 1) schaf.AbZurSchlachtbank(); } // die Schafe könne auch über deren Index angesprochen werden z.B. meineSchafe[3].Color = Colors.Black.
Das geht eben nicht, da C# iwie nur reine Strings als Variablennamen nimmt, und keine anderen Variablen.Zitat von Neo1010naja falls ich das richtig verstanden hab am besten gleich mit array.
n=anzahl der schafe
schleife .. i=0....i->n.
schafe["dolly" + i]=new schaf();
end
hab zwar noch nicht so viel mit c# gearbeitet aber ich bin mir doch recht sicher das auch Stringverkettung in c# gibt
und somit müsstest schon irgendwie "dolly" und deine laufvariable verketten können und somit als namen in zb. einem Array vergeben
Fuer sowas verwendet man normal Container und nicht arrays. Arrays sind nicht dynamisch. Ich kenn mich mit C# nicht aus, aber wahrscheinlich (hoffe ich zumindest) wird es irgendwelche dynamischen Containerklassen fuer z.B. Listen geben.
ja gibt es, wie schon von quilty angesprochen wäre dyn. liste wahrscheinlich eine der besten varianten
Danke @ quilty.
Aber heißen jetzt nicht alle Schafe "Schaf" und ich hab nur ein Objekt überladen ? Wobei dann sollt ich sie auch durch ne durchgehende Nummer identifizieren können wie zB Schaf.ID, oder ?
thx an alle auf jeden fall
edi:/ Ok, hat sich erledigt, steht eh noch unten in weiser Voraussicht
Dann musst du den Objekten irgendwie eine Identifikation zukommen lassen
Zitat von treshDann musst du den Objekten irgendwie eine Identifikation zukommen lassen
In java tät mas ca so machen:
List<Schaf> = new List();
Schaf schaf1 = new Schaf("Karl");
Schaf schaf2 = new Schaf("Lisa");
List.add(schaf1);
List.add(schaf2);
Das bezweifle ich stark, weil List in Java ein Interface ist (und nebenbei noch generisch) und du nur einen Datentyp angibst aber keinen Variablennamen, würde deine erste Zeile gleich mal einen Error werfen.Zitat von BuSHidOIn java tät mas ca so machen:
List<Schaf> = new List();
Schaf schaf1 = new Schaf("Karl");
Schaf schaf2 = new Schaf("Lisa");
List.add(schaf1);
List.add(schaf2);
Zitat von BuSHidOIn java tät mas ca so machen:
List<Schaf> = new List();
Schaf schaf1 = new Schaf("Karl");
Schaf schaf2 = new Schaf("Lisa");
List.add(schaf1);
List.add(schaf2);
naja, eigentlich List<Schaf> list = new ArrayList<Schaf>(); , wenn man brav gegen interfaces programmiert wie sich das gehört, und keine unchecked warnings haben will
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025