如果使用try catch,Java会反复打印

时间:2015-10-24 14:33:26

标签: java

我正在制作一个基础应用程序来训练你的数学技能。我有这段代码:

while (true)
        {
            try
            {
                int userAnswer;
                System.out.println("Type quit to exit to the menu!");
                int randInt = r.nextInt(num2);
                System.out.println(num1 + " + " + randInt + " =");
                userAnswer = in.nextInt();
                if(userAnswer == num1 + randInt) System.out.println("Correct!");
                else System.out.println("Wrong!");
                break;
            }
            catch(Exception e)
            {

            }
        }

当有人在答案中打印出d或其他东西时,试试捕获就会消失。但是,然后它进入while循环并反复发送类型退出以退出菜单然后像1 + 2 =无限的...我想我知道什么是错的,userAnswer已被指定为抛出一个异常进入catch并且它只是继续打印它们并转到catch并返回,因为userAnswer已经被分配。我认为这就是正在发生的事情,我可能是错的。请帮忙!

编辑:我忘记说清楚了,但是我想再次重新打印这个问题,退出循环进入一个菜单,你不能回答问题,我想让它重做尝试捕获的内容......

5 个答案:

答案 0 :(得分:0)

如果不处理它,你永远不应该捕获异常。

catch(Exception e)
{
    System.out.println("An error has occured");
    break;
}

如果发生Exception,这应该会阻止程序无限循环。

答案 1 :(得分:0)

如果用户输入以字母形式出现,则会因为您尝试读取(解析)为整数而获得异常。所以你的catch子句在循环中你必须在那里编写break来从循环中走出来。 我仍然建议你将getline作为字符串,然后与你的cli命令(在你的情况下退出)比你可以尝试将其解析为整数和处理循环逻辑。

答案 2 :(得分:0)

  

如果不匹配,你不会打破while循环

<video width="400px" height="300px" autoplay loop>
  <source ng-attr-src="{{videos[currentVideo].url}}" type="video/mp4" />
</video>

答案 3 :(得分:0)

如果发生异常,你不会打破循环。

library(MASS) data(menarche) glm.out = glm(cbind(Menarche, Total-Menarche) ~ Age, family=binomial(logit), data=menarche) coefficients(glm.out) ## (Intercept) Age ## -21.226395 1.631968 块中添加break;语句以运行程序而不会进行无限循环,以防发生异常。

答案 4 :(得分:0)

由于给定的答案与您的要求不符,我将为您解决这个“谜语”。

我猜你不知道的是,如果扫描器与预期不符,扫描器将不会读取下一个令牌。因此,如果您拨打in.nextInt()并且下一个标记不是一个数字,则扫描程序将抛出InputMismatchException并保持阅读器位置。因此,如果再次尝试(由于循环),它将再次抛出此异常。为避免这种情况,您必须使用错误的令牌:

catch (Exception e) {
    // exception handling
    in.next();
}

这会消耗坏令牌,因此in.nextInt()可以接受新令牌。此外,无需在此处添加break

请注意in.next()只读取一个标记,该标记由空格分隔。因此,如果用户输入a b c,那么您的代码将抛出三个异常,因此生成三个不同的问题,因为用户可以输入一个数字。您可以使用in.nextLine()来避免这种情况。但这可能导致另一个问题:Scanner issue when using nextLine after nextXXX,所以要注意:)。