Java 尝试捕获赋值问题

Java 尝试捕获赋值问题,java,try-catch,Java,Try Catch,当我输入int第一个程序检查并赋值但不打印时,下一个int我输入它但打印第一个输入的值。如果值为string,则再次询问,但不将值分配给number。我如何解决这个问题?先谢谢你 public static void main(String[] args) { int number = 0; Scanner kb = new Scanner(System.in); do { try { System.out.println(&

当我输入int第一个程序检查并赋值但不打印时,下一个int我输入它但打印第一个输入的值。如果值为string,则再次询问,但不将值分配给number。我如何解决这个问题?先谢谢你

public static void main(String[] args) {

    int number = 0;

    Scanner kb = new Scanner(System.in);

    do {
        try {
            System.out.println("Enter a number: ");
            number = kb.nextInt();
        } catch (Exception e) {
            System.out.println("Not a number!");
            kb.nextLine();

        }

    } while (!kb.hasNextInt());
    System.out.println(number);

}
输出

Enter a number: ab
Not a number!
5
Number: 0
  • 不要把nextLine和nextAnything混为一谈。如果要读取整行,请使用
    .next()
    ,并更新扫描仪的分隔符:
    scanner.useDelimiter(“\r?\n”)-按您的方式操作意味着,如果用户使用键盘上最大的键,您的应用程序将中断

  • 您可能应该将其放在实用方法中

  • 不要在您的while状态下使用
    .hasNextInt()
    。如果用户输入非数字,则返回false。如果输入是正确的,就把它设为真,然后跳出循环。请注意,
    kb.hasNextInt
    将冻结(等待),直到用户输入内容。毕竟,只要用户没有输入另一个令牌,扫描器怎么可能告诉您它是否是int


  • 如果您不打算使用nextXXX方法,那么最好只使用BufferedReader#readLine()。。我从来都不喜欢扫描仪。