执行while循环以捕获java中的异常

cs7cruho  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(537)

java初学者。我试图创建一个do while循环,用户应该在其中输入一些信息。如果用户键入的信息正确 something_A ,程序应该继续要求用户输入 something_B .
如果用户为此输入了不正确的信息,程序应该抛出相应的异常 InvalidExcep_B . 我可以让所有这些工作,除了一旦抛出异常,程序会提示用户从一开始就输入信息。
我应该怎么做才能让程序只提示输入不正确的信息?

boolean continueInput = true;

    userInput = new Scanner (System.in);
    System.out.println(); 

    do {
        try {  

            System.out.print("Enter Something_A: ");
            something_A = userInput.nextInt();

            if (condition ok) {
                run statements;
            }

            System.out.print("Enter Something_B: ");
            something_B = userInput.nextInt();

            if (condition ok) {
                run statements;
            }

            System.out.print("Enter Something_C: ");
            something_C = userInput.nextInt();

            if (condition ok) {
                run statements;
            }

            continueInput = false;
        }

        catch (InvalidExcep_A e) {

            System.out.println(e.toString());
            continueInput = true;
        }

        catch (InvalidExcep_B e) {

            System.out.println(e.toString());
            continueInput = true;
        }

        catch (InvalidExcep_C e) {

            System.out.println(e.toString());
            continueInput = true;
        }

    } while (continueInput == true);

    System.out.print("Enter Something_D: ");
    something_D = userInput.next();

    printInfo (parameters);
}

这就是我目前所拥有的。谢谢您!

vsikbqxv

vsikbqxv1#

你可以试试看。
将每个输入的do while分开(现在,您可以在一个do while中完成所有操作)。有点重复,但是嘿,它完成了任务。
存储一个[input,actions]列表,然后在while循环中遍历它,停止条件是一旦完成该列表。

vnjpjtjt

vnjpjtjt2#

你的代码几乎是正确的,除非我们需要记住 Something_A 是否已完成。同样,对于 Something_B 以及 Something_C 我们必须记住它是否完成了。所以,条件 Something_A , Something_B 以及 Something_C 应该是不同的。所以我选择了 conditionA , conditionB 以及 conditionC 为了 Something_A , Something_B 以及 Something_C 分别。
以下代码应该可以解决您的问题:

boolean continueInput = true;
boolean conditionA = true, conditionB = true, conditionC = true;
Scanner userInput = new Scanner (System.in);
System.out.println(); 

int somethingA = -1, somethingB = -1, somethingC = -1;
String somethingD = "";

do {
    try {  
        if (conditionA) {
            System.out.print("Enter Something_A: ");
            somethingA = userInput.nextInt();
//            runStatementsA();
            conditionA = false; // Will not prompt for Something_A again.
        }

        if (conditionB) {
            System.out.print("Enter Something_B: ");
            somethingB = userInput.nextInt();
//            runStatementsB();
            conditionB = false; // Will not prompt for Something_B again.
        }

        if (conditionC) {
            System.out.print("Enter Something_C: ");
            somethingC = userInput.nextInt();
//            runStatementsX();
            conditionC = false; // Will not prompt for SOmething_C again.
        }

        continueInput = false;
    } catch (java.util.InputMismatchException  e) { // Replace 'java.util.InputMismatchException' with 'InvalidExcep_A'
        System.out.println(e.toString());
        userInput.next(); // Flush the scanner object
    } catch (java.lang.NullPointerException e) { // Replace 'java.lang.NullPointerException' with 'InvalidExcep_B'
        System.out.println(e.toString());
        userInput.next(); // Flush the scanner object
    } catch (java.lang.RuntimeException e) { // Replace 'java.lang.RuntimeException' with 'InvalidExcep_C'
        System.out.println(e.toString());
        userInput.next(); // Flush the scanner object
    }

} while (continueInput == true);

System.out.print("Enter Something_D: ");
somethingD = userInput.next();

//printInfo(parameters);

相关问题