Java catch-try
Airi
- java
class fehler extends Exception { // Klass definieren für Exception ungueltigeZahlen
public fehler() {}
public fehler(String meldung){
super(meldung);
}
}
public class Aufgabe1
{
/* global members */
/******************/
/** Fehleranzeige beim Konvertieren zu Integerwerten */
static final int ERR_INT_BAD_VALUE = -2147483647;
/** Fehleranzeige beim Konvertieren zu Doublewerten */
static final double ERR_DOUBLE_BAD_VALUE = -9.99e-99;
/** Eingabestream, welcher durch die statische Eingabemethoden verwendet wird */
static BufferedReader din;
/************************************************************************************/
/**
* Diese Funktion eröffnet den Eingabekanal vom aktuellen Fenster, von der Tastatur
* Der Handle wird statisch in der Klasse abgelegt
*/
static void OpenInput()
{
din = new BufferedReader(new InputStreamReader(System.in));
}
/************************************************************************************/
/**
* Liest eine String - Variable vom Eingabe - Stream und gibt sie zurück
* @return eingelesener String
*/
static String ReadString()
{
String a="";
try {
a = din.readLine();
} catch (IOException e1) {
System.out.print ("Ungueltige Eingabe!!\n");
}
return (a);
}
/************************************************************************************/
/**
* Liest eine Integer - Variable vom Eingabe - Stream und gibt sie zurück
* @return eingelesener Integerwert oder ERR_INT_BAD_VALUE
*/
static int ReadInt()
{
int a=ERR_INT_BAD_VALUE;
try {
a = Integer.parseInt(din.readLine());
} catch (IOException e1) {
System.out.print ("Ungueltige Eingabe!!\n");
} catch (NumberFormatException e2){
System.out.print ("Ungueltige Eingabe!!\n");
}
return (a);
}
/************************************************************************************/
/**
* Liest eine Double - Variable vom Eingabe - Stream und gibt sie zurück
* @return eingelesener Doublewert oder ERR_DOUBLE_BAD_VALUE
*/
static double ReadDouble()
{
double a=ERR_DOUBLE_BAD_VALUE;
try {
a = Double.parseDouble(din.readLine());
} catch (IOException e1) {
System.out.print ("Ungueltige Eingabe!!\n");
} catch (NumberFormatException e2){
System.out.print ("Ungueltige Eingabe!!\n");
}
return (a);
}
static int StringToInt(String s) {
int x;
try {
x = Integer.parseInt(s); //buildin function verwenden
} catch (Exception e) {
x = ERR_INT_BAD_VALUE;
}
return (x);
}//StringToInt
static double rechnung (double a, double b, double c, double res) throws fehler //Funktion
{
if(c== 0 || (a-b)<0){
throw new fehler();
}else{
res=(Math.sqrt(a-b))/c;
}return(res);
}
static String funktion1 (String a)
{
System.out.println("bitte zahl a eingeben"); //Ausgabe
a=ReadString(); //Wert in Variable speichern
return(a);
}
static String funktion2 (String b)
{
System.out.println("bitte zahl b eingeben"); //Ausgabe
b=ReadString(); //Wert in Variable speichern
return(b);
}
static String funktion3 (String c)
{
System.out.println("bitte zahl c eingeben"); //Ausgabe
c=ReadString(); //Wert in Variable speichern
return(c);
}
public static void main (String [] args) throws Exception {
OpenInput();
String a="a";
String b="b"; //Variable deklarieren
String c="c";
double zahla;
double zahlb;
double zahlc;
double res=0;
String fun1;
String fun2;
String fun3;
do{
fun1=funktion1(a); //Wert in Variable speichern
if(fun1.equals("bye")){ //if-schleife, fals bye eigegeben wurde das programm beenden
System.out.println("Das Programm wurde beendet"); //Ausgabe
}else{
fun2=funktion2(b);
fun3=funktion3(c);
try{
zahla=Double.parseDouble(a);
zahlb=Double.parseDouble(b);
zahlc=Double.parseDouble(c);
res=rechnung (zahla, zahlb, zahlc, res);
System.out.println(res);
}
catch(fehler e1){
System.out.println("Ungültige Texteingabe");
}
catch(NumberFormatException e1){
System.out.println("Ungültige Zahleneingabe");
}
}
}while(!fun1.equals("bye"));
}
}
das ist mein programm und ich will dass wenn ich in den 3 variablen TEXT eingebe das die fehlermeldung kommt UNGÜLTIGE TEXTEINGABE aber es funktioniert nicht es kommt imme UNGÜLTIGE ZAHLENEINGABE wieso? wo liegt der fehler?
danke
Hi,
das ist mein programm
Kannst du bitte das nächste Mal versuchen, den Code erst mal selber auf das wesentliche zu reduzieren, anstatt uns hier so viel um die Ohren zu klatschen? Danke.
try{
zahla=Double.parseDouble(a); zahlb=Double.parseDouble(b); zahlc=Double.parseDouble(c); res=rechnung (zahla, zahlb, zahlc, res); System.out.println(res); } catch(fehler e1){ System.out.println("Ungültige Texteingabe"); } catch(NumberFormatException e1){ System.out.println("Ungültige Zahleneingabe"); }
> und ich will dass wenn ich in den 3 variablen TEXT eingebe das die fehlermeldung kommt UNGÜLTIGE TEXTEINGABE aber es funktioniert nicht es kommt imme UNGÜLTIGE ZAHLENEINGABE wieso?
Weil [Double.parseDouble](http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Double.html#parseDouble(java.lang.String)) nun mal eine NumberFormatException wirft, wenn sich der übergebene String nicht als Double-Wert interpretieren lässt.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
try{
zahla=Double.parseDouble(a); zahlb=Double.parseDouble(b); zahlc=Double.parseDouble(c); res=rechnung (zahla, zahlb, zahlc, res); System.out.println(res); } catch(fehler e1){ System.out.println("Ungültige Texteingabe"); } catch(NumberFormatException e1){ System.out.println("Ungültige Zahleneingabe"); }
> Weil [Double.parseDouble](http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Double.html#parseDouble(java.lang.String)) nun mal eine NumberFormatException wirft, wenn sich der übergebene String nicht als Double-Wert interpretieren lässt.
>
Und wie muss ich es denn machen komm nicht nach...?
danke
mfg
Hi,
Weil Double.parseDouble nun mal eine NumberFormatException wirft, wenn sich der übergebene String nicht als Double-Wert interpretieren lässt.
Und wie muss ich es denn machen komm nicht nach...?
Wenn dir die NumberFormatException, die Double.parseDouble bei aus seiner Sicht ungültigen Werten wirft, nicht ausreicht - dann musst du halt vorher überprüfen, was im String eigentlich drin steht. (Oder nachher, in der Reaktion auf die Exception, noch mal danach schauen und unterschiedlich darauf reagieren.)
MfG ChrisB
Hi,
wo liegt der fehler?
class fehler extends Exception { // Klass definieren für Exception ungueltigeZahlen
Fehler 1: Klassennamen beginnen in Java üblicherweise mit Großbuchstaben.
static void OpenInput()
Fehler 2: Methodennamen beginnen in Java üblicherweise mit Kleinbuchstaben.
static String funktion1 (String a)
static String funktion2 (String b)
static String funktion3 (String c)
2 davon sind überflüssig. Das "a", "b" oder "c" in der Ausgabe kann als Parameter übergeben werden (was ja auch schon geschieht, aber nicht wirklich genutzt wird).
ReadInt, ReadDouble, StringToInt werden nicht benutzt.
try{ zahla=Double.parseDouble(a); zahlb=Double.parseDouble(b); zahlc=Double.parseDouble(c);
wenn Du hier für eine der erhofften Zahlen etwas anderes als eine Zahl angibst, fliegt eine NumberFormatException.
res=rechnung (zahla, zahlb, zahlc, res);
In dem Fall wird rechnung gar nicht mehr aufgerufen - also kann kein fehler (sollte ja eigentlich Fehler sein) geworfen werden.
} catch(fehler e1){ System.out.println("Ungültige Texteingabe"); } catch(NumberFormatException e1){ System.out.println("Ungültige Zahleneingabe"); } }
cu,
Andreas