2016-04-18 4 views
0

hier ist mein Code so weit. Ich ziehe Daten aus einer TXT-Datei und schreibe in eine neue Datei mit Durchschnittswerten von Alter und Erfahrung. Ich bekomme nicht die richtigen Durchschnittswerte. Wo ist mein Fehler?miscalculating Durchschnitt der Summen

Ich bin ziemlich neu in der Programmierung und weiß nicht viel mehr als das, was ich in diesem Semester gelernt habe. Die Daten aus der Datei, die ich ziehe, sind unten. Ich soll die Durchschnittswerte der Spalten A und E berechnen.

 A E 
1235 W 45 20 
2536 W 55 21 
5894 W 60 30 
4597 W 75 35 
2597 S 35 10 
5689 S 40 20 
5489 W 55 39 
5872 M 60 40 
5569 M 55 25 
5566 W 80 20 
8865 M 59 35 
5598 S 65 35 

Meine aktuelle Ausgabe ist unten ..

  Employee Report    
ID Age Exp Eligibility 
---- --- --- ----------- 
1235 45 20 lack of exp age 
2536 55 21 lack of exp age 
5894 60 30 lack age 
4597 75 35 can retire 
2597 35 10 lack of exp age 
5689 40 20 lack of exp age 
5489 55 39 lack age 
5872 60 40 can retire 
5569 55 25 can retire 
5566 80 20 lack of exp 
8865 59 35 can retire 
5598 65 35 can retire 
Avg 51 24 

Die Mittelwerte sollen 57,0 und 27,5 sein Was bin ich?

+0

Vielleicht, wenn Sie eine Diagnose von 'empSum',' ageSum' und 'expSum' zur richtigen Zeit drucken, wäre es nützlich, das Problem zu debuggen. Ein Dump deines gesamten Programms, der nicht auf das reduziert ist, was nötig ist, um das Problem zu reproduzieren, ohne Lärm zu erzeugen, ist nicht furchtbar freundlich zu anderen. Eine Sache ist interessant ... die Durchschnittswerte, die Sie ausdrucken, sind für 13 Datenpunkte ganzzahlig richtig, und Sie haben 13 Zeilen mit 12 Datenpunkten. – mah

+3

Bitte schauen Sie sich [mcve] – Claudius

+2

an. Sie wollen 'ParseLineIn()' vor 'UpdateTotals()' aufrufen oder Sie fügen das letzte Alter nicht hinzu. Außerdem erhöhen Sie 'empSum', unabhängig davon, ob die Zeile alter/exp-Daten enthält oder nicht (Sie erhöhen sie also um 1, wenn die Datei eine Kopfzeile oder eine leere Zeile hat, obwohl sie nicht zur Summe addiert wurde). Ich habe das Gefühl, dass es auch andere Probleme gibt, aber fang dort an. – Quantic

Antwort

0

Es kann wahrscheinlich sein, dass Sie zunächst Ihre empSum vor sind Inkrementieren alle Berechnungen innerhalb des UpdateTotals() Methode zur Durchführung:

while ((lineIn = fileIn.ReadLine()) != null) 
{ 
     UpdateTotals(); // Increments your `empSum` (even for the header row) 
     ParseLineIn(); 
     CalcRetirement(); 
     printDetailLine(); 
} 

Diese Durchschnitte dazu führen könnten, 13 durch einen Wert geteilt werden, die eine größer ist als du erwarten Sie 12, die Ihr aktuelles Problem erklären könnte. Möglicherweise möchten Sie explizit überprüfen, ob sich Mitarbeiterdaten in dieser Zeile befinden, bevor Sie empSum inkrementieren.

+0

Es ist wahrscheinlich viel einfacher - siehe meinen Kommentar zum Teilen von 'int's. – Filburt

+0

danke, neuere Hauptmethoden und behoben –