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 Réponses :
J'utiliserais une boucle infinie . Vous pouvez le quitter en utilisant une break
a> lorsque vous êtes prêt. public static void main(String[] args) {
while (true) {
try {
@SuppressWarnings("resource")
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;
//Do whatever... use 'break' to exit the loop when you are done
} catch (ArithmeticException e) {
System.out.println("Divide by 0");
} catch (InputMismatchException e) {
System.out.println("Wrong entry");
}
}
}
Soit un break
soit un drapeau booléen combiné avec while (myFlag) ...
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
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.
while (true) { try { // your code break; } catch (Exception e) { } };
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.