小编典典

Java中的do-while循环的异常处理

java

该算法应将3个整数带入ArrayList。如果输入的不是整数,则将出现提示。当我执行代码时,该catch子句会执行,但是程序会陷入无限循环。有人可以指导我朝正确的方向前进,我感谢您的帮助。:-D

package chapter_08;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class IntegerList {
    static List<Integer> numbers = new ArrayList<Integer>();

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int counter = 1;
        int inputNum;

        do {
            System.out.print("Type " + counter + " integer: " );
            try {
                inputNum = input.nextInt();
                numbers.add(inputNum);
                counter += 1;
            }
            catch (Exception exc) {
                System.out.println("invalid number");
            }
        } while (!(numbers.size() == 3));
    }
}

阅读 718

收藏
2020-11-26

共1个答案

小编典典

这是因为当使用下一个int读取nextInt()并且失败时,Scanner仍然包含键入的内容。然后,当重新进入do-
while循环时,input.nextInt()尝试再次使用相同的内容对其进行解析。

您需要使用以下Scanner内容“冲洗” 内容nextLine()

catch (Exception exc) {
    input.nextLine();
    System.out.println("invalid number");
}

笔记:

  • 您可以删除该counter变量,因为您没有使用它。否则,你可以更换counter += 1counter++
  • 可以替换while (!(numbers.size() == 3))使用while (numbers.size() != 3),甚至更好:while (numbers.size() < 3)
  • 捕获异常时,除非您有充分的理由这样做,否则您应尽可能具体。在您的情况下Exception应替换为InputMismatchException
2020-11-26