Airi: Java catch-try

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

  1. 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?
    
    1. 				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 
      
      1. 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

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.