/*
P R O G R A M M B E S C H R E I B U N G
Demonstriert eine Anweisung, die mit try ... catch bearbeitet werden muss.
Es gibt mehrere catch.
Es soll ein Kindertaschenrechner programmiert werden, in dem u.a. die Division
zweier ganzzahliger Zahlen berechnet werden soll.
Der Nenner ist fehlerhaft, wenn er kleiner oder gleich 0 ist.     
Wenn der Nenner 0 ist, soll dies ein spezieller Nenner-Fehler sein.

Bemerkung:
Man kann das Programm noch weiter ausbauen:
Summe, Produkt, Differenz integrieren. 
Berücksichtigen, dass Zahlen müssen sein müssen.
*/

package de;
public class MainException18 {
	public static void main(String[] args){
		int ergebnis=0;
		KinderTR kt = new KinderTR();
		try{
			ergebnis = kt.kinderDivision(3,0);
			//ergebnis = kt.kinderDivision(3,-5);
			// ergebnis = kt.kinderDivision(6,2);			
		}
		catch(MyException_NennerNull nn){
			nn.printFehlermeldung();			
		}
		catch(MyException_NennerFehlerhaft nf){
			nf.printFehlermeldung();			
		}
		System.out.println("Das Ergebnis ist: "+ergebnis);
	}
}	

class KinderTR{
	private int a;
	private int b;

	public void printAll(){
		System.out.println("a= "+a+"b= "+b);		
	}

	public int kinderDivision(int a, int b) throws MyException_NennerNull, MyException_NennerFehlerhaft{
		int erg;
	  	if(b==0){
	  		// throw veranlaßt die Unterbrechung der "normalen" Ausführung
	  		// des Programms. Es wird der entsprechende Ausnahmehandler gesucht.
	  		throw new MyException_NennerNull("Nenner von "+a+"/"+b+" ist Null");
	  	}
	  	if(b<0){
		  	// throw veranlaßt die Unterbrechung der "normalen" Ausführung
		  	// des Programms. Es wird der entsprechende Ausnahmehandler gesucht.
		  	throw new MyException_NennerFehlerhaft("Nenner von "+a+"/"+b+" ist nicht >0");
	  	}
	  	erg = (int)(a/b);
	  	return(erg);
	}
}

class MyException_NennerNull extends MyException_NennerFehlerhaft{
	private String zk;
	
	public MyException_NennerNull(String s){
		super(s);
		zk=s;
	}
	public void printFehlermeldung(){
		System.out.println("Fehlermeldung: "+zk);		
	}
}

class MyException_NennerFehlerhaft extends Throwable{
	private String zk;
	
	public MyException_NennerFehlerhaft(String s){
		System.out.println("Fehler im Nenner: ");	
		zk=s;
	}
	public void printFehlermeldung(){
		System.out.println("Fehlermeldung: "+zk);		
	}
}

