捕捉异常后如何返回/返回循环

时间:2019-05-07 12:47:36

标签: java loops try-catch

我有这段代码可以计算指数示例3⁴= 81.0,并且该代码询问用户要输入多少个数字和指数,以及当用户输入数字和指数并且输入无效的字母时,该代码将捕获java.util.InputMismatchException并停止。是否有任何代码可以返回到输入数字并以指数形式再次输入?

我已经尝试了布尔值方法,但是它没有用,我正在搜索这件事,但没有人进行。

    try {
        String[] unicode = {"\u2070", "\u00b9", "\u00b2", "\u00b3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"};

        System.out.print("Enter how many Numbers and Exponent you want to enter: ");
        int userNum = new Scanner(System.in).nextInt();
        ArrayList<Integer> num = new ArrayList<>();
        ArrayList<Integer> nums = new ArrayList<>();
        for (int i = 0; i < userNum; i++) {
            System.out.print("Enter a Number: ");
            int userNumber = new Scanner(System.in).nextInt();
            num.add(userNumber);
            System.out.print("Enter the exponent: ");
            int userExponent = new Scanner(System.in).nextInt();
            nums.add(userExponent);
        }
        for (int i = 0; i < userNum; i++) {
            double answer = num.get(i);
            for (int x = 0; x < nums.get(i) - 1; x++) {
                answer *= num.get(i);
            }
            System.out.print(num.get(i));
            for (int x = 0; x < String.valueOf(nums.get(i)).length(); x++) {
                char g = String.valueOf(nums.get(i)).charAt(x);
                String h = String.valueOf(g);
                System.out.print(unicode[Integer.parseInt(h)]);
            }
            System.out.println(" = " + answer);
        }
    } catch (InputMismatchException exception) {
        System.out.println(exception+" Invalid Input. Numbers Only.");
    }
}

我期望的是,当用户输入无效的输入时,程序将捕获java.util.InputMismatchException并将其打印并返回输入以再次输入

例如

输入数字:12

输入指数:asd

java.util.InputMismatchException

输入指数:123

1 个答案:

答案 0 :(得分:1)

您应该创建一些验证方法,这些方法将返回boolean,这表示验证成功。比起ValidationError,您可以使用do while循环再次请求输入。像这样:

do {    
      System.out.print("Enter a Number: ");
      String userInput = new Scanner(System.in).next();
  } while (!validate(userInput));

num.add(Integer.parseInt(userInput));

如果唯一的限制是具有有效的int编号,则也可以在尝试读取int之前使用Scanner.hasNextInt() mtehod。