Laden...

Notendurchschnitt wird falsch berechnet

Erstellt von DerAskTyp vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.732 Views
D
DerAskTyp Themenstarter:in
11 Beiträge seit 2015
vor 8 Jahren
Notendurchschnitt wird falsch berechnet

            int sum = 0 ;
            int quantity=0;
            double average = 0;
                
                
            for (int idx = 0; idx < marks.GetLength(0); idx++) //Schleife für die  Berechnung der Durchschnitte von jedem Schüler
            {
                for (int i = 0; i < marks[idx].Length; i++) 
                {
                    sum +=  marks[idx][i];
                    quantity++;
                }
                average = (double)sum / quantity;
                Console.WriteLine("Der Durchschnitt des  "+ (idx+1) +" Schülers beträgt:{0}",average);
                average = 0;
                
            }

LG, DerAskTyp

3.170 Beiträge seit 2006
vor 8 Jahren

Hallo,

weil quantity und sum nicht zurück auf 0 gesetzt werden?

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
2.222 Beiträge seit 2008
vor 8 Jahren

Dein Code, den Teil den wir hier sehen können zumindest, sieht noch nicht so gut aus.
marks scheint mir ein Konstrukt eines Arrays von Arrays zu sein.
Wäre es nicht sinnvoller anstelle dieser Kombination, die zwar funktioniert es schwerer zu lesen ist, nicht marks als eine Liste mit einem entsprechenden Container Objekt umzusetzen?
Dann ist der Code auch verständlicher.

Hilft dir später auch, wenn du deinen alten Code mal nach X Monaten wieder anfassen musst.
In einem kleinen Projekt vielleicht kein Problem aber in großen sollte man da schon sauber arbeiten.
Würde es dir ans Herz legen dir das anzugewöhnen, macht das lesen des eigenen Codes um längen leichter 😃

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

J
251 Beiträge seit 2012
vor 8 Jahren

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

und für logische Probleme hilft oft: back to roots -> Blatt und Bleistift -> Prozess gedanklich abbilden

3.003 Beiträge seit 2006
vor 8 Jahren

*seufz* Genau für so etwas wurde mal LinQ eingeführt.

Einzeiler.


var marksPerStudent = marks.Select((p,index) => new { Index = index+1, AverageMark = p.Average() }).ToList();

marksPerStudent.ForEach(p => Console.WriteLine("Schüler: {0}, Durchschnitt: {1:N}", p.Index, p.AverageMark));

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

16.827 Beiträge seit 2008
vor 8 Jahren

*seufz*
Naja.... mal bei den Tatsachen bleiben.

Bei nem Anfänger jetzt mit Linq zu kommen, der nicht mal das Zurücksetzen von Variablenwerten erkannt hat: definitiv falsche Zielgruppe und stiftet mehr Verwirrung als Lösung.

3.003 Beiträge seit 2006
vor 8 Jahren

Kann man so sehen. Man kann ihm aber auch sagen, dass er die Baugrube nicht mit einem Löffel ausheben muss, wenn direkt daneben ein Caterpillar steht. War jetzt in dem sehr einfachen Fall nicht anders möglich als die komplette Lösung hinzukritzeln, aber die Hoffnung bleibt, dass er sich davon motiviert fühlt und sich das genauer anschaut und zu verstehen versucht. LINQ soll Datenabfragen vereinfachen. Deshalb kann man es gerade Anfängern gern mal nahelegen - Dinge wie Summenzähler oder Indexe nicht zurückzusetzen, können jedenfalls so nicht passieren.

In diesem Sinn, @DerAskTyp: wenn du Daten hast und auswerten willst, solltest du dir Linq anschauen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

T
2.222 Beiträge seit 2008
vor 8 Jahren

@LaTino
Hier muss ich Abt zustimmen.
Linq jetzt schon anzuschauen ohne die Grundlagen zu verstehen, halte ich für unsinn.
Wenn man Linq verwenden will, muss man schon einige Grundlagen kennen und verstehen.
Was bringt es auf Linq zu verweisen, wenn man sich noch nichtmal mit den Möglichkeiten von Collections auskennt?
Wenn man noch nicht mal Grundlagen versteht, ist Linq totaler Lern Overhead.

Klar igeht es so schneller und einfacher aber ohne Grundlagen zu verstehen ist Linq der falsche Ansatz.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

3.003 Beiträge seit 2006
vor 8 Jahren

Hm. Mag sein, dass das an meinem speziellen Arbeitsumfeld liegt.
(Resharper läuft hier überall, und der schlägt bei den üblichen, ich nenn' sie mal "Anfängerschleifen", automatisch Linq-Vereinfachungen vor. Unsere Anfänger lernen das also von Anfang an einfach nur durch häufiges Sehen UND sie lernen gleich noch, dass es sich um eine kürzere und sicherere Schreibweise handelt. Solche Fehler wie oben kriege ich deshalb so gut wie nie zu Gesicht.)

Also, @DerAskTyp: wenn du deine foreach-Anweisungen im Schlaf beherrschst, DANN erinner' dich dran, das mal jemand Linq erwähnt hat, und schau's dir an 😉.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

16.827 Beiträge seit 2008
vor 8 Jahren

ReSharper als Maßstab setzen ist auch ziemlich fahrlässig.
Der schlägt Dir auch Zeugs vor, das Kontraproduktiv ist... (meine Erfahrung).

Grad von Dir hät ich in der Hinsicht etwas mehr Auge fürs Wesentliche erwartet 😉

3.003 Beiträge seit 2006
vor 8 Jahren

Die Standardkonfiguration von re# ist nicht jedermanns Sache. Wenn er dir was vorschlägt, das dir nicht passt, dann solltest du ihn so einstellen, dass er das in Zukunft lässt 😉. Zum Beispiel finde ich persönlich die Macke, dass er Verschachtelungen bei if-else zu minimieren versucht, indem er die Bedingungen so umkehrt, dass im ersten if() direkt ein break/return kommt, extrem nervig. Aber das kann man ihm halt abgewöhnen. Ich bin im übrigen immer noch der Meinung, dass integrale Sprachbestandteile wie lambdaausdrücke und linq sehr früh beigebracht werden sollten. Direkt VOR der Objektorientierung mit Klassen und Schnittstellen. Gilt auch für delegaten und events, aber jetzt sind wir endgültig OT 😉

Ich verstehe aber, das man das anders sehen kann. Persönlich erinnert mich die Syntax bei verschachtelten Schleifen wie oben immer an VBA, das kann ich nicht so recht ernst nehmen 😉

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

Hinweis von gfoidl vor 8 Jahren

Bleibt bitte beim Thema und zieht nicht jede Diskussion so (unnötig) in die Länge.

Für den OT nicht gerade hilfreich.