2
votes

Comment boucler le programme après qu'une exception est levée

J'ai le code suivant qui peut lever des exceptions:

import java.util.*;
import java.io.*;

class Test {
    public static void main (String [] args) {
        try {
            Scanner keyboard = new Scanner (System.in);
            int n1, n2;
            System.out.print("Type an int: ");
            n1 = keyboard.nextInt();
            System.out.print("Type another int: ");
            n2 = keyboard.nextInt();
            int r = n1/n2;
        }
        catch (ArithmeticException e) {
            System.out.println("Divide by 0");


        }
        catch (InputMismatchException e) {
            System.out.println("Wrong entry");
        }
    }
}

Après qu'une exception est levée. Je veux que le programme recommence à demander à l'utilisateur de saisir à nouveau un nouvel int au lieu de quitter.


4 commentaires

Vous voulez faire une boucle autour de cela.


Avez-vous déjà entendu parler des déclarations de répétition ?


Vous ne redémarrez pas un programme; vous l'empêchez simplement de se terminer (avec une boucle infinie).


Oui mais je veux qu'il ne boucle que s'il détecte une exception.


4 Réponses :



3
votes

Enveloppez votre code avec un while (true) et ajoutez un break à la fin du bloc try , afin qu'il soit atteint uniquement si aucune exception n'est levée.

par exemple

while (true) {

    try {

        // your code goes here ....

        break;    // this will only be reached if no exceptions thrown
    }
    catch (...) { 

    }
};  // close the while loop

// this will be reached after the break only, i.e. no exceptions


0 commentaires

0
votes

Je n'aime pas l'idiome "while (true) with a break". Je trouve plus clair dans ce cas - j'ai rarement des règles qui s'appliquent dans tous les cas - d'introduire une variable auxiliaire qui contrôle la boucle.

boolean repeat;
do {
    repeat = false;
    try {  
        ...stuff...
    }
    catch (SomeException ex) {
        ... error stuff...
        repeat = true;
    }
while (repeat);

Ceci est (a) rend la terminaison de boucle plus claire que des sauts arbitraires ('break') hors de la boucle, et (b) le rend trivial lorsque vous trouvez que vous avez d'autres raisons de refaire le corps de la boucle.


0 commentaires

1
votes
while (true) {

    try {

        // your code

        break;
    }
    catch (Exception e) { 

    }
}; 

0 commentaires