View Full Version : [Frage] fehlerbehandlung von bsp1072
ich weiß, es ist schon ein bißchen spät für so eine frage (besonders weil ich morgen mein bsp abgeben muss ;) ) aber ich bin beim genaueren betrachten der fehlerbehandlung in der spezifikation von bsp.1072 etwas ins grübeln gekommen... die kann man nämlich meiner meinung nach auf verschiedene arten auslegen:
"Sämtliche Eingabedatensätze sind immer vollständig einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.
Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.
Sind die Datentypen bei allen Eingaben richtig, die eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben."
hier die ganze spezifikation: http://eprog.sourceforge.net/eprog/1072/gehalt.html
besonders der letzte absatz klingt etwas paradox: wie können die datentypen bei allen eingaben richtig sein wenn die eingegeben daten gleichzeitig inhaltlich nicht korrekt sind oder die bedingungen nicht erfüllen...?
heißt das auf deutsch jetzt, daß ich jeden datensatz einlesen soll (egal ob richtig oder falsch) und die fehlermeldung erst erscheinen soll wenn signalisiert wurde, daß die datensätze berechnet werden sollen (also durch eingabe einer negativen zahl)
oder daß ich die eingabe der datensätze unterbrechen soll, sobald ein falscher datensatz eingegeben wurde...?
naja, sie meinen, wenn der input statt einem float-wert aus sag ma aml einem Buchstaben besteht, dann soll dein programm eine "?" ausgeben, weil der input einfach nur falsch ist.
der float-wert soll aber auch zwischen 0 und 1 liegen. wenn der float-wert jetzt aber gößer ist, ist zwar der input korrekt (immerhin ists ja ein float!) er stimmt aber inhaltlich nicht, da er über dem zulässigen bereich ligt. jetzt soll das programm "FALSCHE EINGABE" ausgeben.
=> bei einem syntaktischen fehler soll ="?" kommen, bei einem semantischen "FALSCHE EINGABE"
Wegen dem "Sämtliche Eingabedatensätze sind immer vollständig einzulesen": heißt eigentlich schon, daß du alles einlesen sollst. aber bei einem von meinen programmen hab ichs auch nicht so gemacht und sie haben sich auch nicht aufgeregt. du kannst ja bei alten bsps nachsehen, wie die es gelöst haben...
ok, danke. ist eigentlich eh logisch...
ich schätz mal ich sollte eine pause einlegen damit mein verstand wieder ein bissl klarer wird ;)
:awake:
aja, noch eine kleine frage, wenn wir schon mal dabei sind:
um eine exception zu "catchen" schreibt man ja zB:
catch(.......Exception e)
was genau hat es mit diesem e auf sich? da kann man theoretisch irgendeinen buchstaben stattdessen auch verwenden oder?
stimmt, du kannst die auch anders nennen! e bezeichnet in diesem fall die geworfene exception wie der name eine variable.
der teil
try{
...
}
catch(Exception e)
{System.err.println ("Error caused " + e.getMessage());}
fängt alle exceptions ab, die geworfen werden können, was für eprog reicht. in späteren fächern (z.b.: verteilte systeme) mußt du dann auf exceptions geauer eingehen und die arten unterscheiden. da mußt du dann die einzelnen exceptions klarerweise auch anders benennen - ist wie bei den variablen! das kann dann halt z.b. so aussehen:
try
{
...
}
catch (IOException a)
{System.err.println ("Error occured during IO-activity causing " + a.getMessage());}
catch (NullPointerException b)
{System.out.println("Fehler" );}
catch (ClassNotFoundException c)
{continue;}
okay, die exceptions und deren behandlung sind jetzt nicht grad representativ... ich hab mal die genommen, die mir auf die schnelle eingefallen sind. in diesem fall wird jede art von exception unterschiedlich behandelt. bei a wird die art des fehlers ausgegeben, bei b nur ein text und bei c macht er einfach weiter und ignoriert das problem.
Bruno
//Edit: hui!!! hab da ja ganzschön lang rumgefaselt! ich hoff, die antwort war jetzt nicht zu ausführlich geworden!!
keineswegs! je ausführlicher, desto besser ;)
hab leider schon wieder eine frage (aber dafür die letzte (hoff ich zumindest)) :
****************************
float[] input = new float[i];
double[] output = new double[i];
for(i = 0; i<input.length; i++)
{
input[i] = temp_input[i];
double k = 1/input[i];
output[i] = ( Math.log(k) / Math.log(2) );
if(i==0)
printFixed(output[i]);
else
{
print(" ");
printFixed(output[i]);
}
******************************
warum muss ich hier einen neuen array (input) deklarieren, wenn ich ihn nachher sowieso wieder mit dem alten (temp_input) gleichsetze...?
(hoffe der teil aus dem code sowie meine frage ist ausführlich genug)
ich hab schon probiert das ganze ohne dem array "input" zum laufen zu bringen, also nur mit "temp_input"... dann rechnet das programm zwar alles brav aus aber am ende gibt es trotzdem eine fehlermeldung...
Kein problem, das mit der frage! ich helf gerne!
nein, der teil vom code war nicht genug, die erklärung liegt weiter vorne, aber ich hab mir das bsp von sourceforge mal angesehen. :idea: der grund, warumst input deffinieren mußt, ist folgender:
ganz am anfang wird temp_input ml fix mit der länge 10 initialisiert und dann solange gefüllt, solange input kommt und keine abbruchbedigung erfüllt wurde. => wenn nur 5 zahlen eingegeben werden, stehen die in der einträgen temp_input 0-4, der rest ist noch leer. wärend du den input in temp_inp einfüllst, rennt der counter "i" mit, der zählt, wie viele einträge es bereits gab.
danach initialisierst du den array input, der die länge i hat (und damit genauso viele einträge hat, wie es inputdaten gegeben hat) und überträgst die daten aus temp_inp.
der unterschied zwischen den beiden ist jetzt der: wärend temp_inp (unter umständen) noch leere einträge hat, ist jeder eintrag in input gefüllt.
In der Schleife, die du gepostet hast, rennt das prog dann alle einträge von input durch, stellt die berechnung an und gibt die lösung aus. wenn du aber statt input temp_inp verwendest, versucht er, auch da den ganzen array zu durchlaufen
- und stößt dabei klarerweise früher oder später auf einen leeren eintrag, auf den er nicht zugreifen kann (klar, steht ja auch noch nichts drinnen! :distur: ) und das wirft dann klarerweise eine exception.
Und? hab ich alle klarheiten beseitigen können? :p
Bruno
so, mein programm hab ich jetzt endlich fertig
dank deiner hilfe :applaus:
jetzt muss ich nurnoch die dokumentation schreiben ;)
aja und mathe wollt ich ja auch noch machen :zzz:
ich helf immer wieder gerne! und viel spaß noch bei mathe! :devil:
Bruno
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.