View Full Version : [Frage] EprogException Error
Ich bekomme komischer Weise immer den selben Fehler und weiss nicht was ich noch ausprobieren könnte, dass es funktioniert:
test.java:51: exception eprog.EprogException is never thrown in body of corresponding try statement
catch (EprogException e) {
^
1 error
mein Code schatu so aus;
import eprog.*;
public class test extends EprogIO {
public static void main(String[] args) {
boolean inputError = false;
String eingabe = "";
final int Min = 0;
final int Max = 10000000;
int len = 0;
// Einlesen und summieren
try {
eingabe = readInput();
} catch (Exception e) { //Eingabefehler
println(e.getMessage());
}
}
}
public static String readInput() throws eprog.EprogException {
String eingabe = "";
boolean inputError = false;
try {
eingabe = readWord();
}
catch (EprogException e) {
inputError = true;
}
if (inputError) throw new EprogException("FALSCHE EINGABE");
else
return eingabe;
}
}
Wäre wirklch nett, falls mir igendjemand weiterhelfen könnte...
:confused:
CitizenX
13-04-2003, 22:54
http://stud3.tuwien.ac.at/~e0026996/EPROGIO.PDF
Greets X :coolsmile
;) interessant.
Die Fehlermeldung bezieht sich auf den try-Block, nach dem Du eine EprogException abfängst. Offensichtlich kommt innerhalb des try-Blocks nichts vor, das eine EprogException auslösen kann. Das heißt im Klartext folgendes:
Schreib Die Methode readInput() so um, dass sie brav readWord() aufruft und einen Wert retourniert. Ohne try, ohne catch. Nimm das "throws eprog.EprogException" dabei auch von der Definition der Methode heraus.
Danach ändere die main-Methode so ab, dass kein try, catch darin vorkommt. Das heißt, readInput() wird einfach ganz normal aufgerufen von main.
Teste das ganze. Wenn der Compiler jetzt meldet, dass Du eine Exception abfangen mußt (nämlich die Exception, die readWord() eventuell verursachen könnte), dann ergänze readInput() bei der Definition der Methode einfach mit einem "throws EprogException" und in main fängst Du die Exception ab.
Nur nebenbei:
In Deinem aktuellen Code, fällt auf, dass Du in der readInput()-Methode zuerst eine Exception abfängst, und danach wieder selbige wirfst. Du müßtest sie eigentlich weder abfangen, noch werfen :) - denn Du hast oben in der Definition der Methode bereits stehen, dass die Methode EprogExceptions werfen kann. Das heißt exceptions von dem Typ dürfen einfach auftreten, und sie werden weitergereicht an die Stelle, von der die Methode aufgerufen wurde.
Dein Um-die-Ecke-denken scheint allerdings nicht Ursache der Java-Fehlermeldung zu sein. Vielmehr glaube ich dass readWord() anscheinend keine Exceptions werfen kann und Du somit auch keinen try/catch Block brauchst. Da ich die entsprechende Library nicht habe, kann ich nicht nachsehen...
Hoffe aber, dass Du Dich jetzt ein bisschen besser auskennst :)
...um die Vermutung von Usher zu bestätigen: readWord() kann keine Exception werfen (is auch relativ einsichtig, weil ja alles was eingelesen werden kann ein gültiger String ist)...
danke vielmals, jetzt versteh ich es ...
Habe mir ursprünglich das Beispiel SumInt angeschaut, da war das so komisch, dass in der einen Methode eine Exception gethrowt wurde und an Main weitergeleitet wurde.
Ich muss den String eh in einen Integer oder so umparsen, da werde ich meinen try-catch Block dann wahrscheinlich brauchen...
so, da hab ichs jetzt wieder ohne try -catch, wenn ich den String parse:
Exception in thread "main" java.lang.NumberFormatException: For input string: "234234a423"
at java.lang.NumberFormatException.forInputString(Num berFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:435)
at java.lang.Integer.parseInt(Integer.java:476)
at test.getInput(test.java:45)
at test.main(test.java:11)
und wenn ich das versuche abzufangen, compiliert er es mir zwar, aber diese Meldung kommt dann doch, wenn ich einen buchstaben versuche zu parsen.
Hier mein Code damit es verständlicher ist:
(Habs auch schon getInput() ohne throws EprogException probiert und stattdessen den String "FALSCHE EINGABE" als return Parameter verwendet, hat ber auch nichts genützt leider):
import eprog.*;
public class test extends EprogIO {
public static void main(String[] args) {
String inputString = "";
try {
inputString = getInput();
}
catch (EprogException e) {
println("FALSCH!!!");
}
println(inputString);
}
public static String getInput() throws EprogException {
String eingabe;
final int Min = 0;
final int Max = 10000000;
boolean inputError = false;
int len;
int betrag;
char last_char;
eingabe = readWord();
// Eingabe-Variablen initialisieren
len = eingabe.length();
last_char = eingabe.charAt(--len);
// String in einen Integer parsen
betrag = Integer.parseInt(eingabe.substring(0,len));
// Variable inputError auf true setzen, wenn letzter Character kein Buchstabe ist
if(!Character.isLetter(last_char)) inputError = true;
// Variable inputError auf true setzen, wenn es sich nicht um A oder B handelt
if(! ((last_char == 'A') || (last_char == 'B')) )
inputError = true;
// Variabele inputError auf true setzen, wenn restlicher String nicht ausschließlich aus Zahlen
//besteht
char[] textArray = new char[len];
eingabe.getChars(0,--len,textArray,0);
for(int i=0;i<len;i++) {
if(Character.isLetter(textArray[i])) { // Wenn ein Buchstabe vorkommt,
inputError = true; // wird Err auf true gesetzt
};
};
if (inputError) throw new EprogException("FALSCHE EINGABE");
else
return eingabe;
}
}
...das scheint am Integer.parseInt zu liegen, das anscheinend kein "throws NumberFormatException" hat aber trotzdem wirft oder so... also: try/catch drum herum bauen und entsprechend behandeln (also den Fall, dass es keine Zahl ist)... im Zweifelsfall einfach catch (Exception e) schreiben, das fängt alles ;)
PS: ... das mit dem ...substring(0,len) scheint buggy zu sein, weil wenn ichs richtig verstanden hab, willst du ja das letzte Zeichen nicht mehr parsen...
...das scheint am Integer.parseInt zu liegen, das anscheinend kein "throws NumberFormatException" hat aber trotzdem wirft oder so... also: try/catch drum herum bauen und entsprechend behandeln (also den Fall, dass es keine Zahl ist)... im Zweifelsfall einfach catch (Exception e) schreiben, das fängt alles ;)
danke, dass hat funktioniert !
Ist das auch erlaubt bei den Eprog-Übungen, eine andere Exception zu verwenden als die EprogException?
Hat nämlich nur mit try - catch(Exception e) wie du gesagt hast funktioniert....
Oder geht das vielleicht doch irgendwie auch mit der EprogException?
PS: ... das mit dem ...substring(0,len) scheint buggy zu sein, weil wenn ichs richtig verstanden hab, willst du ja das letzte Zeichen nicht mehr parsen...
stimmt, ganz richtig, habs auch schon geändert auf substring(0,--len)
wär nicht substring(o, (len-1)) besser? durch das --len verringerst du, wenn ich mich recht erinnere, len DAUERHAFT um 1 und len verwendest du ja später noch...
@Merlin: man kann alles verwenden, was im JDK 1.4.1 vorhanden ist, bzw. was auf der antigone hinhaut... nur die Eingabe/Ausgabe sollte über das eprog-package laufen.
danke vielmals...
das mit dem len-1 hab ich nicht gewusst, abre ich hab's mir eh schon gedacht, dass es blöd ist, so mit --len wegen später verwenden und so ... ;)
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.