Mein zähler Funktioniert nicht richtig.. c#

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ich kann dir auf anhieb nicht sagen woran es liegt. Könntest du dieses "spinnt manchmal" konkretisieren (wie hoch sind die Zahlen wenn es passiert, passiert es beim Wechsel der Vokabel, etc?).

Dein Code ist designtechnisch ne Katastrophe. Das sieht so aus als wärst du Programmier-Anfänger, der vorher Windows Forms benutzt hat. Richtig? Dass du Anfänger bist ist nicht weiter schlimm. Dennoch solltest du ein paar Dinge beachten:

  • Deine Namensgebung entspricht nicht der Norm (Felder und Properties kann man durch die Schreibweise nicht unterscheiden)
  • Du hast scheinbar noch keine Ahnung wie man WPF benutzt, da du die Werte in das Control schreibst so wie bei Windows Forms. In WPF benutzt man Bindings um Daten anzuzeigen
  • Du schreibst verändernde und zurückgebende Methoden (prüfe()). Normal macht man nur eins von beiden
  • Das sieht so aus als würdest du nicht genau wissen wie man Strings vergleicht. In deinem Fall sollte das kein Problem sein (anders als wenn du das in Java machen würdest), aber les dir trotzdem mal das durch: http://stackoverflow.com/questions/44288/differences-in-string-compare-methods-in-c-sharp

Hallo,

Ich bin in der Tat ein Anfänger. Auf das Design hab ich jetzt nicht viel Wert gelegt, da ich den Code nur schnell schreiben wollte....

Das mit WPF stimmt auch - hab mit Forms angefangen, dann mit WPF weitergemacht. Aber ich versteh dein Anliegen in diesem Punkt trotzdem nicht, vielleicht konkreter werden ?

Mein Anliegen war aber in der Frage, wieso mein Zähler nicht funktioniert.. Also wenn ich eine Vokabel richtig beantwortet habe, zählt er falsch, bei den falschen Antworten ist alles korrekt. Einfach mal selbst probieren - Ihnen wird es sofort auffallen Danke.

0
@Sommerbild

Ich kann dir nicht das ganze Konzept hinter WPF erklären, das wäre viel zu viel ums hier zu schreiben (und ehrlich gesagt hab ich nicht unbedingt Lust dazu). Es ist auch nicht ganz einfach das durchzublicken. Ich kann mich erinnern, bei mir hats ziemlich gedauert bis der Groschen gefallen ist. Vielleicht hilft dir http://wpftutorial.net/DataBindingOverview.html

Zu deinem Problem: Ich hab schon verstanden dass dein Zähler nicht geht. Kann es sein, dass er immer bei den "falschen Vokabeln" eins draufzählt, auch wenn du es richtig schreibst? Wenn ja, solltest du dir unbedingt den geposteten Link auf StackOverflow durchlesen wie man Strings vergleicht, dann machst du nämlich genau das falsch.

1
@FaronWeissAlles

Ich kann dir nicht das ganze Konzept hinter WPF erklären, das wäre viel zu viel ums hier zu schreiben

Wollte ich auch nicht aber ich glaube schon was Sie meinen. Trotzdem sind das meine ersten Schritte mir WPF - gibt ja auch viele Sachen im Internet dazu. Da muss man halt bisschen reinschnuppern..

Kann es sein, dass er immer bei den "falschen Vokabeln" eins draufzählt

Nein - manchmal zählt er einen hoch aber dann setzt er sich sofort auf null zurück.

0
@Sommerbild

Ich hab das Programm mal bei mir laufen lassen und muss dir sagen, dass der Zähler korrekt funktioniert. Allerdings hast du da einen Logikfehler...

Du speicherst die Anzahl der richtigen und falschen Antworten als Teil der Vokabel. Designtechnisch bedeutet das du merkst dir zu jeder Vokabel wie oft du diese konkrete Vokabel falsch oder richtig beantwortet hast. Das funktioniert. Allerdings macht deine Anzeige einen Fehler: du aktualisierst die Werte in der GUI nicht konsistent. Wird die Vokabel richtig beantwortet aktualisierst du nur die richtigen Antworten. D.h. deine GUI zeigt wie oft du die aktuelle Vokabel richtig beantwortet hast, während die falschen auf dem alten Wert verbleiben. Die falschen Vokabeln werden nur aktualisiert wenn du was falsch beantwortest. Und dann wird der aktuelle Wert der aktuellen Vokabel angezeigt.

Um das zu korrigieren ändere den Code folgendermaßen:

if (aktuelleVokabel.prüfe(txtboxEnglischeEingabe.Text))
{
     aktuelleVokabel = Vokabular[random.Next(Vokabular.Length)];
     lblDeutscheAusgabe.Content = aktuelleVokabel.DeutschesWort1;                
}

lblAnzahlRichtigerAntworten.Content = aktuelleVokabel.Richtig1;
lblAnzahlFalscherAntworten.Content = aktuelleVokabel.Falsch1;

Wie du sehen kannst mach ich zuerst die Änderungen und dann aktualisiere ich die GUI. Und zwar komplett.

Wenn du stattdessen die Gesamtanzahl aller falschen und richtigen haben willst kannst du ganz einfach damit arbeiten:

lblAnzahlRichtigerAntworten.Content = Vokabular.Sum(v => v.Richtig1);
lblAnzahlFalscherAntworten.Content = Vokabular.Sum(v => v.Falsch1);

Hoffe das hilft dir :-)

1

Was möchtest Du wissen?