C # Datei E / A-Effizienz

7

Ich habe eine Hausaufgabe gemacht, hier ist die Problemstellung:

Ihr Programm sollte wie folgt funktionieren:

  1. Bitten Sie den Benutzer, Ihnen einen Dateinamen zu geben. Nimm den Dateinamen und speichere ihn.
  2. Öffnen Sie die Datei.
  3. Von der Datei lesen Sie eine Temperatur und eine Windgeschwindigkeit. Beide Werte sollten in Variablen gespeichert werden, die als doppelt deklariert sind. Die Datei ist eine Textdatei. Jede Zeile der Datei enthält eine Temperatur und einen Windgeschwindigkeitswert.
  4. Berechnen Sie den Wind-Chill-Faktor mit einer Programmiermethode und zeigen Sie das Ergebnis im folgenden Format an:

    Für t = Temperatur aus der Datei   und v = Windgeschwindigkeit aus der Datei   Wind Chill Index = berechnetes Ergebnis Grad Fahrenheit.

    Alle Zahlen mit zwei Nachkommastellen anzeigen. (Denk daran - keine magischen Zahlen!)

  5. Wiederholen Sie diese Schritte, bis das Ende der Datei erreicht ist.

Ich habe die Aufgabe abgeschlossen, mein Code ist unten, ich habe mich nur gefragt, ob es irgendeinen Weg gibt, um es effizienter zu machen, oder wenn es verschiedene und kreative Wege gibt, um dieses Problem zu lösen, habe ich dies bereits erledigt 50/50, aber ich bin nur neugierig, wie einige von Ihnen fortgeschrittene und erfahrene Programmierer dieses Problem angehen würden.

%Vor%

Fühlen Sie sich frei, mir zu sagen, was Sie davon halten.

    
Alex 19.11.2009, 23:14
quelle

9 Antworten

7

Sie werden nicht viel zipper als das für Datei-IO in C # bekommen. Je nach Größe des Datensatzes kann es sich lohnen, einen gepufferten Reader zu verwenden, aber für ausreichend kleine Dateien lohnt es sich nicht. Ich würde es so lassen wie es ist.

    
Ken Mason 19.11.2009, 23:21
quelle
9

Ihr Weg sieht gut aus, aber:

  • Es würde schöner aussehen, wenn Sie PascalCase für die Konstanten verwendet hätten, wie es die Kodierungskonventionen für c # verwenden.
  • Sie sollten den StreamReader in eine using-Anweisung einfügen, damit er nach dem Beenden ordnungsgemäß entsorgt wird.
  • Sie sollten es wahrscheinlich auch in einen try-Block (und einen Haken, um die Ausnahme richtig zu behandeln) einbinden, um sicherzustellen, dass Sie keine FileNotFound-Ausnahme erhalten.
  • Es ist wahrscheinlich eine bessere Idee, Ihre while-Schleife folgendermaßen zu strukturieren:

while((line = windChillDoc.ReadLine()) != null) { ... } [Darn Formatierung wird nicht richtig funktionieren!]

Abgesehen davon würde ich es nicht wissen, da ich mit Wetterberechnungen nicht vertraut bin:)

    
RCIX 19.11.2009 23:21
quelle
6

Die meisten Ihrer Kommentare sind irrelevant. Der Code sollte Ihnen sagen, wie ... die Kommentare sollten Ihnen sagen, warum.

    
Mike Atlas 19.11.2009 23:20
quelle
6

Kleiner Nitpick, aber "WindChillCalc" sollte "CalcWindChill" sein, wenn Sie englische Methodennamen verwenden (das Verb geht zuerst).

    
Matt 19.11.2009 23:50
quelle
5
%Vor%

Initialisieren Sie nicht mit Werten, die nie verwendet werden; und halten Deklaration und Initialisierung eng beieinander:

%Vor%

using wurde erwähnt - aber nicht @ unnötig verwenden:

%Vor%

sollte nur sein:

%Vor%

Persönlich würde ich LINQ für den Zeilenleser verwenden, aber das bin nur ich ;-p

    
Marc Gravell 19.11.2009 23:36
quelle
4

Warum das tun / während ? In Ihrem do überprüfen Sie, ob der Wert null ist. In Ihrem while überprüfen Sie, ob der Wert null ist. Warum nicht einfach eine while Aussage machen?

%Vor%

EDIT : Der Kompilierungsfehler wurde behoben. Lustig war, dass ich das ursprünglich hatte. Diese Rich Text Box benötigt einen Compiler! : P

    
Wayne Hartman 19.11.2009 23:33
quelle
3

Obwohl es nicht wirklich auf die Leistung bezogen ist (die Hauptfrage)

IMO:

%Vor%

ist nicht viel besser als eine magische Zahl. Wenn ich mir das anschaue, habe ich keine Ahnung, wofür FIRST_EQUATION_NUMBER irgendwo anders als in einer Gleichung verwendet wird, und ich kann nicht sagen, dass sie in der gleichen Gleichung sind oder vier Gleichungen haben, die unterschiedliche Zahlen verwenden? Sie könnten auch in die tatsächliche Methode eingefügt werden, da dies der einzige Ort ist, an dem sie verwendet werden.

Ich würde degreeSymbol zu einem const ändern, anstatt es von einem const int zu bearbeiten später.

%Vor%     
Courtney D 04.12.2009 09:50
quelle
2

Wenn Sie auf Stil etc. hingewiesen werden, dann gibt es ein paar extrem kleine Dinge

  • Die Initialisierung auf double auf 0.0 ist redundant.
  • string.Empty wird anstelle von ""
  • bevorzugt
  • Deine Windchill-Methode kann einfach geändert werden (obwohl ich während der Kompilierung glaube, dass wci optimiert wird - also funktional gleich ist):

(geänderte Formatierung für SO-Lesbarkeit)

%Vor%     
Steven Evers 23.11.2009 18:06
quelle
0

In kleinen akademischen Programmen wie diesem ist die Leistung kein Problem, es sei denn, Sie tun etwas wirklich Dummes. Eine einfache Möglichkeit, festzustellen, ob Leistung ein Problem ist, ist die Frage: "Warte ich damit?"

Wenn es eine enorme Menge an Input gäbe, würde ich fragen, wer die Eingabe liefert und wer die Ausgabe liest. Das würde mir sagen, ob ich die I / O binär statt als Text machen könnte, da der Großteil der Verarbeitung in der Umwandlung von Text in Zahlen bei der Eingabe und Zahlen in Text bei der Ausgabe liegt Gleitkomma.

    
Mike Dunlavey 23.11.2009 17:52
quelle

Tags und Links