当前位置: 首页 > 面试题库 >

使用try-catch和while循环捕获错误

姬歌者
2023-03-14
问题内容

我试图确保用户输入是整数,但是当我使用下面的代码时,我只会得到print语句的无限循环。关于如何改进的任何建议?

boolean valid = false;
System.out.println("What block are you gathering? (use minecraft block ids)");
while(valid == false){
    try{
        block = input.nextInt();
        valid = true;
    }
    catch(InputMismatchException exception){
        System.out.println("What block are you gathering? (use minecraft block ids)");
        valid = false;
    }
}

问题答案:

nextInt()不会消耗无效的输入,因此它将反复尝试读取相同的无效值。要解决此问题,您需要通过调用next()nextLine()接受任何值来显式使用它。

顺便说一句,为使您的代码更整洁并避免昂贵的操作(如创建异常),您应使用hasNextInt()

这是组织代码的方法

System.out.println("What block are you gathering? (use minecraft block ids)");
while(!input.hasNextInt()){
    input.nextLine();// consume invalid values until end of line, 
                     // use next() if you want to consume them one by one.
    System.out.println("That is not integer. Please try again");
}
//here we are sure that next element will be int, so lets read it
block = input.nextInt();


 类似资料:
  • 下面的代码询问用户他/她想要多少个赛车手。

  • 问题内容: 我一直使我的代码陷入无限的while循环中。 没什么可提高的,但是我无法终生解决! 有人请帮忙 我有幸只是重新创建了特定的错误,而没有我实际程序中所有的if语句。 捕获输入不匹配异常时,将发生无限循环。我认为这至少会要求用户重新输入他们的输入,但与其这样做,不如继续这样做: 它的行为就像只是忽略扫描仪对象sc ?! 问题答案: 没有扫描程序不会被跳过,它只是从输入的开头开始。从Java

  • 问题内容: 我试图让用户有机会在引入会产生错误但又无法正常工作的东西之后重复输入,因为一旦发现 错误, 就不会再次执行try东西,而是直接进入catch东西,生成一个永恒的东西。柱。这是我的代码: 问题答案: 输入非整数时,对的调用不会消耗非整数。您需要致电(或)使用它。就像是,

  • 问题内容: 我试图让用户有机会在引入会产生错误但又无法正常工作的东西之后重复输入,因为一旦发现 错误, 就不会再次执行try东西,而是直接进入catch东西,生成一个永恒的东西。柱。这是我的代码: 问题答案: 输入非整数时,对的调用不会消耗非整数。您需要致电(或)使用它。就像是,

  • 问题内容: 当我在 while循环中 使用 try和catch 块时,我的程序有一个无限 循环 。 当我输入一个整数时,它运行良好并要求另一个输入,但是当我输入一个字符时,它将进入无穷循环。为什么会这样呢? 问题答案: 遇到无效输入时,由于nextInt()不使用无效令牌,因此程序进入无限循环。因此,导致该异常的任何令牌都将保留在该位置,并在下次尝试使用nextInt()时继续引发异常。 可以通过

  • 问题内容: 一旦在此代码中捕获到异常,该方法就会运行,但是一旦我输入一个数字,程序就会关闭,并显示“生成成功”消息。一旦发生异常,是否有任何方法可以返回while循环? 问题答案: 将 try / catch 放入 while循环中 :