Как зациклить программу после возникновения исключения - PullRequest
2 голосов
/ 11 марта 2019

У меня есть следующий код, который может выдавать исключения:

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");
        }
    }
}

После создания исключения.Я хочу, чтобы программа снова обратилась к пользователю с просьбой ввести новый int вместо выхода.

Ответы [ 4 ]

3 голосов
/ 11 марта 2019

Оберните ваш код while (true) и добавьте break в конце блока try, чтобы он был доступен только в том случае, если не было выдано никаких исключений.

например

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
1 голос
/ 23 апреля 2019
while (true) {

    try {

        // your code

        break;
    }
    catch (Exception e) { 

    }
}; 
1 голос
/ 11 марта 2019

Я бы использовал бесконечный цикл .Вы можете выйти из него с помощью оператора break, когда будете готовы.

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");
            }
        }
    }
0 голосов
/ 11 марта 2019

Мне не нравится идиома "while (true) с перерывом".Я нахожу более понятным в этом случае - у меня редко есть правила, которые применяются во всех случаях - ввести вспомогательную переменную, которая управляет циклом.

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

Это (а) делает завершение цикла более ясным, чем произвольноевыпрыгивает ('break') из цикла и (b) делает его тривиальным, когда вы обнаружите, что у вас есть другие причины для повторного выполнения тела цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...