ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何使用Scanner处理由无效输入(InputMismatchException)引起的无限循环

2019-09-11 01:04:11  阅读:192  来源: 互联网

标签:java-util-scanner java infinite-loop


所以,我对这段代码感到困惑:

import java.util.InputMismatchException;
import java.util.Scanner;

public class ConsoleReader {

    Scanner reader;

    public ConsoleReader() {
        reader = new Scanner(System.in);
        //reader.useDelimiter(System.getProperty("line.separator"));
    }

    public int readInt(String msg) {
        int num = 0;
        boolean loop = true;

        while (loop) {
            try {
                System.out.println(msg);
                num = reader.nextInt();

                loop = false;
            } catch (InputMismatchException e) {
                System.out.println("Invalid value!");
            } 
        }
        return num;
    }
}

这是我的输出:

Insert a integer number:
Invalid value!
Insert a integer number:
Invalid value!

解决方法:

根据扫描仪的javadoc

When a scanner throws an
InputMismatchException, the scanner
will not pass the token that caused
the exception, so that it may be
retrieved or skipped via some other
method.

这意味着如果下一个标记不是int,它会抛出InputMismatchException,但令牌仍然存在.因此,在循环的下一次迭代中,reader.nextInt()再次读取相同的标记并再次抛出异常.你需要的是用它.在catch中添加reader.next()以使用令牌,该令牌无效且需要被丢弃.

...
} catch (InputMismatchException e) {
    System.out.println("Invalid value!");
    reader.next(); // this consumes the invalid token
} 

标签:java-util-scanner,java,infinite-loop
来源: https://codeday.me/bug/20190911/1802739.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有