Laden...

Wie benutze ich Konstruktoren und Parameter richtig?

Erstellt von cicero vor 3 Jahren Letzter Beitrag vor 3 Jahren 590 Views
C
cicero Themenstarter:in
3 Beiträge seit 2021
vor 3 Jahren
Wie benutze ich Konstruktoren und Parameter richtig?

Guten Tag, ich bin relativ in C# und habe davor C und C++ programmiert. Für mich neu ist das objektorienterte mit Class, Methoden und natürlich die Syntax. Ich möchte lediglich aus der Konsole eine Pokerhand mit den angegeben Werten Ass.Clubs und 8.Spades ausgeben. Ich bin verwirrt welche Übergabeparameter und welche Syntax von mir erwartet wird.
Die Fehler sind am unterstrichenen Code.


namespace Pokerblatt
{
    public enum VALUE
    {
        Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace
    }

    public enum SUIT
    {
        Spades, Hearts, Diamonds, Clubs
    }

    public struct Card
    {
        public Card(VALUE rang, SUIT farbe) : this()
        {
            Rang = rang;
            Farbe = farbe;
        }

        public VALUE Rang { get;  set; }
        public SUIT Farbe { get;  set; }
    }

    public class PokerHand 
    {

        public Card Spielerhand1 { get; set; }
        public Card Spielerhand2 { get; set; }
        public PokerHand(Card c1, Card c2)
        {
            Spielerhand1 = new Card { [u]VALUE.Ace, SUIT.Clubs[/u]};
            Spielerhand2 = new Card { [u]VALUE.Eight, SUIT.Spades[/u]};
            c1 = Spielerhand1;
            c2 = Spielerhand2;
          
        }

        static void Main(string[] args)
        {
            Console.WriteLine([u]PokerHand[/u]);
        }

//Vielen Dank für die Hilfe

Gruß cicero

5.658 Beiträge seit 2006
vor 3 Jahren

Bitte poste deinen Code nicht als Plain-Text und verwende Code-Tags [Hinweis] Wie poste ich richtig?

Ansonsten empfehle ich einen Blick in [FAQ] Wie finde ich den Einstieg in C#?

Weeks of programming can save you hours of planning

309 Beiträge seit 2020
vor 3 Jahren

In der Main referenzierst du nur die Klasse.

Bzgl. dem unterstrichenen: How to initialize objects by using an object initializer (C# Programming Guide)

C
cicero Themenstarter:in
3 Beiträge seit 2021
vor 3 Jahren

Danke für die Antwort. Habe mir das zum Herzen genommen und eben die ganze Zeit gelesen was mir weitergeholfen hat.

Jetzt habe ich lediglich das Problem der Übergabe des Enums an meinen Konstrukor und diesen ausgeben zu lassen. Da fehlt mir die nötige Erfahrung. Kann mir das jemand weiterhelfen?

Die Fehlermeldung am unterstrichenen Code ist: CS1503: Argument "2": Konvertierung von "int" in "PokerYT.SUI" nicht möglich.


namespace PokerYT
{
public enum SUIT
    {    HEARTS, SPADES,DIAMONDS,CLUBS
    }

    public enum VALUE
    {   TWO = 2, THREE, FOUR, FIVE, SIX, SEVEN,
        EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE
    }

    public class Card
    {
        public SUIT MySuit;
        public VALUE MyValue;

        public Card(VALUE Wert, SUIT Farbe)
        {   MyValue = Wert;
            MySuit = Farbe;
        }

        public void WriteLine()
        {  Console.WriteLine("{0} + {1}", MyValue, MySuit);
        }

        public class PokerhandTest
        {
            public static void Main()
            {   Card ErsteHand = new Card([u]3, 3[/u]); 
                Card ZweiteHand = new Card([u]6, 2[/u]);

                ErsteHand.WriteLine();
                ZweiteHand.WriteLine();
            }}}

C
cicero Themenstarter:in
3 Beiträge seit 2021
vor 3 Jahren

Der Fehler liegt hier leider wird der nicht im vorherigen Beitrag unterstrichen.


Card ErsteHand = new Card(3, 3);
 Card ZweiteHand = new Card(6, 2);

Die Werte für die Erste Hand und für die zweite Hand werden nicht erkannt.

5.658 Beiträge seit 2006
vor 3 Jahren

Da fehlt mir die nötige Erfahrung.

Dir fehlen die Grundlagen, daher der Link auf den Artikel.

Konvertierung von "int" in "PokerYT.SUI" nicht möglich.

Die Fehlermeldung ist doch relativ aussagekräftig: Du hast extra eine Enum dafür definiert, verwendest aber Integer-Werte.

Bitte lies dir mal die Grundlagen von C# durch. Du kannst nicht erwarten, daß dir das einfach so zufliegt...

Weeks of programming can save you hours of planning

190 Beiträge seit 2012
vor 3 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

M
368 Beiträge seit 2006
vor 3 Jahren

Für mich neu ist das objektorienterte mit Class, Methoden und natürlich die Syntax. Mit C/C++ - Hintergrund ist man auch mehr Freiheiten gewöhnt, die in C# so nicht auftreten (mit dem Hintergrund, dass das Framework potentiell gefährliche Dinge wie z.B. Speichermanipulationen nach Möglichkeit unterbindet). Weiterhin sollte man z.B. den internen Unterschied zwischen Klassen und Struct kennen, wissen wann "enum" statt "switch-case" eingesetzt wird.... Und mit dem jetzt neuen C# 9 unter .NET 5 wird "alter Ballast" der Vorgängerversionen abgeworfen, was es für Neulinge in punkto Studium von Tutorials auch nicht leichter (*) macht: C# 9.0: Top-level Statements. Or Should I Say: Hey, Where’s the Main Method?

(*)kurzgefasst soll neuerer Code potentielle Probleme der Vorgängerversionen addressieren, diese eleganter lösen oder komplett verhindern.

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

W
955 Beiträge seit 2010
vor 3 Jahren

@M.L.: Dein Link ist fehlerhaft. Prüfe mal ob es an dir liegt, ansonsten muss das mit in den Thread Sammelthema Wünsche und Bugreports myCSharp.

Hinweis von MrSparkle vor 3 Jahren

Hab den Link angepaßt