# Wiederholung von try-catch



## chillerStudent (14. Feb 2011)

Hallo,
folgende Hausaufgabe:

ich muss eine Methode schreiben, die einen Zähler und einen Nenner liest. Da es verboten ist, durch null zu teilen, soll das programm wieder von vorne abfragen. Das sind drei Beispiele für die Ausgaben:
*Bitte Zaehler eingeben: 3
Bitte Nenner eingeben: #+
Keine Zahl eingegeben*

*Bitte komplette Eingabe wiederholen
Bitte Zaehler eingeben: 4
Bitte Nenner eingeben: 5
Bitte Zaehler eingeben: 2
Bitte Nenner eingeben: 0
Division durch Null ist unzulaessig*

*Bitte komplette Eingabe wiederholen
Bitte Zaehler eingeben: 1
Bitte Nenner eingeben: 2
Bitte Zaehler eingeben: 3
Bitte Nenner eingeben: 4*

Dazu habe ich die Methode Fraction geschrieben:


```
static Fraction inputFraction() throws NumberFormatException, IOException, WrongInputException, BadDenominatorException{
	  System.out.println("Bitte Zaehler eingeben: ");
	  BufferedReader z = new BufferedReader(new InputStreamReader(System.in));
	  int i;
	  try{
		  i = Integer.parseInt( z.readLine() );
	  }
	  catch(NumberFormatException e){
			  throw new WrongInputException("Keine Zahl eingegeben!");
	  }
	  System.out.println("Bitte Nenner eingeben: ");
	  BufferedReader n = new BufferedReader(new InputStreamReader(System.in));
	  int x;
	  try{
		 x = Integer.parseInt( n.readLine() );
	  }
	  catch(NumberFormatException e){
		  throw new WrongInputException("Keine Zahl eingegeben!");
	  }
	  
	 Fraction f = new Fraction(i, x);
	 return f;
  }
```

Ich muss die Ausnahmne des Typs WrongInputException in der Klasse Start.java so abfangen,
dass im Fehlerfall die erneute Eingabe beider Brüche gefordert wird. Main:


```
public static void main(String[] args) throws BadDenominatorException, NumberFormatException, IOException, WrongInputException{
	 /*
	try{  
		Fraction b1 = new Fraction(2, 3);
		Fraction b2 = new Fraction(1, 2);
		Fraction b3 = new Fraction(0, 4);
		Fraction b4 = new Fraction(5, 0);
	}
    catch(BadDenominatorException e){
    	System.out.println(e.getMessage());
    } 
*/
    try{
    	while(true){
    Fraction b5 = Fraction.inputFraction(); 
    Fraction b6 = Fraction.inputFraction();
    	}
    }
    catch(NumberFormatException e){
    	System.out.println(e.getMessage()+"Bitte komplette Eingabe wiederholen!");	
    }
```

Nun mein Frage: Wie schaffe ich es in der Main die Ausnahmen des Typs WrongInputException abzufangen und zu wiederholen?


----------



## The_S (15. Feb 2011)

try-catch in einer Schleife und die Schleife nur abbrechen, wenn der catch-Block nicht betreten wurde.


----------



## chillerStudent (15. Feb 2011)

```
while(true){
		 if(true){
    try{
    	Fraction b5 = Fraction.inputFraction();
    }
  
    catch(WrongInputException e){
    	System.out.println("sdf");	
    }
	  }else{
		  break;
	  }
	 }
```

So?

Als Ausgabe zeigt er mir immer Exception von dem Konstruktor ??!!

Der Konstruktor sieht so aus: 

```
public Fraction(int enumerator, int denominator) throws BadDenominatorException{
	  this.enumerator=enumerator;
	  this.denominator=denominator;
	 
	 if(denominator==0){
		  throw new BadDenominatorException("Nenner 0 ist unzulässig!");
	 }
  }
```


----------



## The_S (16. Feb 2011)

nein. So hast du ja eine Endlosschleife.


```
boolean abbruch = false;
while (!abbruch) {
  try {
    Fraction b5 = Fraction.inputFraction();
    abbruch = true;
  } catch (WrongInputException e) {
    e.printStackTrace();
  }
}
```


----------

