try / catch语句期间发生错误

时间:2015-11-20 01:36:45

标签: java exception-handling try-catch

好的,这是我的问题。我们的老师希望我们创建一个创建Fibonacci序列的程序,然后用户可以使用数字数组进行操作(比如在索引处获取数字等)。我想要超越并且愚蠢地证明它。我向她询问了关于try / catch语句但是她说它不在课程中。所以,我做了研究并制作了这段代码:

while( valid ) {
        try {
            lengthOfSequence = keyboard.nextInt();
        } catch ( Exception e ) {
            out.println( "You entered an " + e + ". Please enter a number between 1 and " + maxLength );
            throw e;
        }
    }

(最初有效)因此代码应该得到用户输入的整数。然后取整数并将其分配给lengthOfSequence。正确运行(输入一个整数)将允许代码正确运行,但是当我为我的输入插入“o”(或任何其他字符串)时,catch没有捕获Exception并且我收到此错误:

java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at FibonacciRunner.main(FibonacciRunner.java:28)

我尝试了很多方法来尝试修复它,包括:lengthOfSequence = Integer.parseInt( keyboard.nextLine() );,它给了我

java.lang.NumberFormatException: For input string: "o"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at FibonacciRunner.main(FibonacciRunner.java:29)

我还尝试命名例外InputMismatchExceptionNumberFormatException,但仍然收到错误。

我是编码和Stack Overflow的新手,所以提前感谢您的帮助

编辑: 我试图删除throw e,但所有这一切都是创建一个无限循环的代码输出“你输入了java.util.InputMismatchException。请输入1到101之间的数字。”

我也从try语句中删除了这个,因为我认为它不属于问题

 if( lengthOfSequence > 1 && lengthOfSequence < maxLength ) {
      fibonacci.createSequence( lengthOfSequence );
      valid = false;
 }

3 个答案:

答案 0 :(得分:1)

将您的代码更改为:

boolean valid = false;
while( !valid ) {
    try {
        lengthOfSequence = keyboard.nextInt();
        valid = true;
    } catch ( Exception e ) {
        out.println( "You entered a wrong value. Please enter a number between 1 and " + maxLength);
    }
}

如果抛出异常,就像在:

中一样
throw e;

您的程序将不再捕获它并暂停执行。

答案 1 :(得分:0)

删除throw e;,这就是你需要做的。你已经在catch子句中捕获了异常,如果你抛出它,那么你的调用方法必须再次捕获它。但由于调用方法没有try-catch机制,程序将终止并为您提供UNCAUGHT EXCEPTION

答案 2 :(得分:0)

Titus作为评论回答了我的问题,但因为我不能将评论标记为问题,我只是自己回答:

此问题类似于:How to handle infinite loop caused by invalid input using Scanner

引用提图斯:

  

要在收到错误输入时停止循环,您必须在catch块中使用该输入,您可以通过在catch块中添加此语句来实现:keyboard.next()keyboard.nextLine() < / p>

所以我刚刚在我的catch块中添加了keyboard.next();并移除了throw e并且它停止了窃听。谢谢你们!