Programm zur Notenkalkulation

Hier eine Idee, wie man die Strings in Zahlen verwandeln könnte
Code:
    String[] ref={"1","2","3","4","5","6"};
    String line="Deutsch;1;2;3";
    String[] cont=line.split(";");
    int[] value= new int[3];
    for(int i=0; i<3; i++)
    {
    for (int n=0; n<6; n++)
    {if(cont[i+1].equals(ref[n])){
    value[i]=Integer.parseInt(ref[n]);
    break;}}}
    System.out.print(value[0]+" "+value[1]+" "+value[2]);
Dieser Code gibt 1 2 3 aus. Du musst also nur noch den Text einer Zeile aus deiner Datei in line schreiben und nach dem Aufruf dieses Codes enthält value deine Noten in int Werten. Diese Werte wirst du leich weiter verarbeiten können
 
Das funktioniert solange, wie die Noten hinter dem ; keine Buchstaben enthalten. Gesucht ist aber die Umwandlung von s1, m2, e3 etc. dh ref müsste mindestens 18 Einträge haben (s,m,e)x(1,2,3,4,5,6)

Selbst wenn man es s macht wie du, würde ich dann nicht unbedingt mit de Schleife und dem equals arbeiten. Wenn der cont[i+1] keinem Integer entspricht wirft Integer.parseInt(String s) eine NumberFormatException, welche denke ich eher zur Fehlerabfrage geeignet ist.

Außerdem würde ich bei

Java:
int[] value= new int[3];

eine kleine Änderung vornehmen. Statt der 3 würde ich eher die Größe von cont[] -1 nehmen und dementsprechend auch die Ausgabe an keine feste Anzahl von Elementen binden.
 
Zuletzt bearbeitet:
Ich muss hier mal was dazwischen werfen:
Noten sind eine ganzheitliche pädagogische Entscheidung und nicht arithmetische Berechnung.

Na und? Abgesehn davon, dass die meisten Lehrer, die ich kenn, ihre Noten durch Ausrechnen der Durchschnittsnote vergeben, ist es nicht verboten, wenn Schüler ihre Noten zusammenrechnen und daraus den Durchschnitt oder was auch immer errechnen...

Es ist die Aufgabe der Pedagogen die Leistung der Schüler nach eigenem Ermessen zu bewerten, und zwar nicht nur durch feststehende Noten, sondern auch noch anhand anderer Kriterien, wie z.B. mögliches Potenzial, Einsatz, etc., soweit richtig. Nur wie gesagt, die meisten Lehrer die ich kenn, rechnen sich flott Durchschnittswerte (z.B. mit Excel) aus und das Lustige ist, das ist noch nicht mal schlimm. Schlimmer find ich Lehrer, die überhaupt nicht nachdenken und es auch gar nicht versuchen, sondern die Noten wortwörtlich auswürfeln. Dagegen find ich das Berechnen von Noten noch ganz gut ^^
 
@ClarissaB

Mir ist noch eine Kleinigkeit aufgefallen, was nicht weiter schlimm ist, zumidnest nicht als Anfänger, wo ich dich gerne drauf hinweisen möchte :)

Java:
File f = new File(args[0]);

Ich finde deine Idee mit der Eingabe überdie Kommandozeile gut! Aber es kann gut und gerne mal vorkommen, dass man einfach vergisst den Pfad mit anzugeben, dh es existiert keine args[0]! Daher würde ich deinen Programminhalt in eine weitere if-else-Schleife packen...

Java:
if(args[0] != null) {
// deine Funktionalität
}
else System.out.println("Fehler! Es wurde kein Pfad angegeben!");

Edit: Und ein kleiner Tipp:

Solche Sachen kann man ruhig auch in eine Zeile packen, da du nur das Ergebnis selbst verwendest:
Java:
// 3 Zeilen, günstig, falls du beispielsweise den Zwischenschritt File noch an einer anderen Stelle verwenden möchtest
File f = new File(args[0]);
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

// 1 Zeile, günstig, wenn nur das Ergebnis verwendet wird
BufferedReader br = new BufferedReader( new FileReader( new File( args[0] ) ) );
 
Zuletzt bearbeitet:
if-else-Schleife packen...
Du meinst if-else-Abfrage oder? if-else-Schleife zu sagen ist ne Sünde ^^

Ja, eine Überprüfung wär wohl gut, kann böse Situationen vermeiden.

Ich persönlich würde das aber nicht schachteln. Wenn man zu viele Verschachtelungen hat, könnte man später Probleme beim Aufräumen des Codes bekommen, weil der Überblick flöten geht...

Wenn ich auf Fehlerfälle prüfe und reagiere, dann kapsel ich den Code nicht in Bedingungen, sondern prüfe einfach die Gegebenheiten und wenn der restliche Code in der Methode nicht ausgeführt werden soll, dann brech ich sie einfach vorzeitig ab oder lass nen Fehler werfen.

Variante 1:
Java:
// Methoden-Verarbeitung vorzeitig abbrechen
if(args.length == 0) {
    System.out.println("Keine Parameter übergeben!");
    return;
}

// Ausführbarer Code

Variante 2:
Java:
// Fehler werfen lassen
if(args.length == 0) {
    throw new IllegalArgumentException("Keine Parameter übergeben!");
}

// Ausführbarer Code

Hat einfach folgenden Sinn:
Wenn man später den Code erweiter/ändern/aufräumen will, dann kann es bei zu vielen Schachtelungen passieren, dass man die eine oder andere Klammer vergisst und diesen Fehler dann zu finden ist oft recht schwer und das nicht nur weil man vergessen hat die Klammer mit zu entfernen, sondern weil die IDEs oft auch nicht wissen welche Klammer nun zu viel oder zu wenig ist. Sie versuchen es zwar anzuzeigen, aber oft eben an den falschen Stellen, sodass man manchmal aus Versehen auch mal Code aus einer Abfrage auskapselt, der eigentlich reingehörte etc.

Einer aus meinr Klasse ist auch son Fan von sehr tief geschachtelten Strukturen und wenn irgentwo nen Fehler ist, dann darf ich das meist wieder korrigieren und das ist alles andere als Lustig, wenn da mehr als 50 verschachtelte Abragen sind. Deswegen hab ich mir das angewöhnt auf Fehler so zu reagieren, wie ich es gezeigt hab, jedenfalls wenn ich den Fehler absehen kann und das ist bei Nicht-Angabe von Parametern ja der Fall...
 
Zuletzt bearbeitet:
Hallo nochmal,

erstmal muss ich ein großes dankeschön in die runde werfen, echt super von euch.

mit diesen tipps werde ich sicher ein gutes stück weiter kommen. zwar habe ich nun erstmal eine woche urlaub und werde in der zeit sicher weniger zum programmieren kommen, aber dafür werde ich mich heute noch ein paar stunden vor den rechner klemmen.

an HonniCilest: gute idee, kommt schon oft genug vor das ich vergesse den pfad anzugekommen. werde da noch eine nachträgliche abfrage einbauen müssen. aber das ist erstmal noch zukunftsmusik, im vordergrund steht momentan die funktionalität des programms - ausschmücken werde ich es später noch.
gut, dann mach ich mal an die arbeit. :)
 
@ClarissaB

Java:
if(args[0] != null) {
// deine Funktionalität
}
else System.out.println("Fehler! Es wurde kein Pfad angegeben!");

Wenn *keine* Argumente übergeben werden, dann ist das ARG-Array auch leer!
d.h args[0] ergibt eine NULLPOINTER-Exception (also keine Verbesserung)!
(damit versuchst du, auf das erste Element im Array zuzugreifen, das Array hat aber evtl. kein erstes Element!)

besser wäre:
Java:
if(args.length > 0 && args[0] != null) {
// deine Funktionalität
}
else System.out.println("Fehler! Es wurde kein Pfad angegeben!");


NACHTRAG:
OOOPSSS sorry...
hab den POST von Akeshihiro nicht gesehen......
 
Zuletzt bearbeitet:
Das hier
Code:
 && args[0] != null
erübrigt sich eigentlich, weil wenn args.length > 0 sein sollte, dann gibt es zwangsweise ein erstes Argument und das kann ohnehin nicht null sein, da ein Argument übergeben wurde...
 

Neue Beiträge

Zurück