Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Potentielle Fehlerquellen beim "Spielstein setzen" (Teil #3) #1

Open
suchja opened this issue Mar 24, 2020 · 6 comments
Open

Potentielle Fehlerquellen beim "Spielstein setzen" (Teil #3) #1

suchja opened this issue Mar 24, 2020 · 6 comments

Comments

@suchja
Copy link
Member

suchja commented Mar 24, 2020

Je nachdem wie du die Schritte 1-5 in der Aufgabe "Spielstein setzen" umgesetzt hast, gibt es einige (potentielle) Fehlerquellen bzw. Gefahren. Schaue deinen Quellcode nochmals genau an und identifiziere mindestens einen problematischen Abschnitt.

Erstelle an diesem Issue einen Kommentar in dem du den problematischen Quellcode zeigst und erklärst was dabei das Problem sein kann.

@suchja
Copy link
Member Author

suchja commented Mar 24, 2020

Für die Erkennung ob alle Kästchen auf dem Spielfeld voll sind habe ich folgenden Quellcode geschrieben:

    private bool IstSpielfeldVoll()
    {
        foreach (var item in Spielfeld.Children)
        {
            Button kaestchen = (Button)item;

            if (kaestchen == null || kaestchen.Content.ToString() == "")
            {
                return false;
            }
        }
        return true;
    }

Ich nehme also jedes Steuerelement aus dem Spielfeld (das ist bei mir das Grid) und konvertiere es in einen Button (Button kaestchen = (Button)item;). Das geht solange gut wie nur Button im Spielfeld enthalten sind. Füge ich jedoch ein anderes Steuerelement (z.B. Label) ein, dann habe ich ein Problem.

Bildschirmfoto 2020-03-24 um 15 34 54

Mögliche Lösung:
Anstelle des cast ((Button)item) kann ich den as Operator verwenden. Der Unterschied zwischen den beiden ist, dass bei einem cast eine InvalidCastException geschmissen wird wenn der Typ nicht stimmt und bei dem as Operator wird null zurückgegeben, wenn der Typ nicht stimmt.
Mit dem as Operator würde es dann so aussehen:

Button kaestchen = item as Button;

@20Marco20
Copy link

Hallo Jan, dieses Mal ist die Aufgabe ziemlich schwer. Ich fürchte ich muss auf Deine Lösung warten. Bruchstücke habe ich selbst hin bekommen. Aber ich komme nicht weiter.

@suchja
Copy link
Member Author

suchja commented Apr 7, 2020

Vielen Dank für die Rückmeldung! Wo hängst du denn? Hast du schon etwas Quellcode geschrieben? Magst du ihn mir zeigen? Vielleicht kann ich dir ein paar Tipps geben.

@20Marco20
Copy link

20Marco20 commented Apr 7, 2020 via email

@MK-NEUKO
Copy link

MK-NEUKO commented Jul 3, 2020

Hallo,
ich habe einen Fehler eingebaut, der mich viele Nerven gekostet hat. Ich habe 2 Tage gebraucht bis ich es begriffen habe.

private bool IstSpielfeldVoll()
        {
            Grid spielfeld = new Grid();
            foreach (UIElement stein in spielfeld.Children)
            {
                if (stein is Button feld)
                {
                    if (feld.Content == null)
                    {
                        return false;
                    }
                }
            }
            return true;
        }

Ich habe die ganze Zeit angenommen, ich muss erst eine Instanz erzeugen. C#Grid spielfeld = new Grid(); Die Schleife hat also nicht funktioniert, weil nichts in spielfeld gespeichert war. Ich bin mir nicht sicher ob das richtig ist?

Dann habe ich noch eine andere Frage. Was ist hier der Unterschied?

feld_0_0.Content = null; 
// oder
feld_0_0.Content.ToString == "" ;

@MK-NEUKO
Copy link

MK-NEUKO commented Jul 4, 2020

Das hier vom letzten Comment

feld_0_0.Content = null; 
// oder
feld_0_0.Content.ToString == "" ;

ist falsch ausgedrückt.
Ich meinte beide Anweisungen als vergleich.
Also so:

feld_0_0.Content == null; 
// oder
feld_0_0.Content.ToString == "" ;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants