加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Scanner.reset()不起作用

发布时间:2020-12-15 00:25:26 所属栏目:Java 来源:网络整理
导读:这段代码应该从用户获得一个整数,然后完成程序.如果用户输入的号码无效,则会再次询问用户. 捕获异常后,它使用Scanner.reset()重置扫描程序,但它不起作用.并重新抛出先前的异常. Scanner in = new Scanner(System.in);while (true) { try { System.out.print(
这段代码应该从用户获得一个整数,然后完成程序.如果用户输入的号码无效,则会再次询问用户.

捕获异常后,它使用Scanner.reset()重置扫描程序,但它不起作用.并重新抛出先前的异常.

Scanner in = new Scanner(System.in);
while (true) {
    try {
        System.out.print("Enter an integer number: ");
        long i = in.nextLong();
        System.out.print("Thanks,you entered: ");
        System.out.println(i);
        break;
    } catch (InputMismatchException ex) {
        System.out.println("Error in your input");
        in.reset(); // <----------------------------- [The reset is here]
    }
}

我以为Scanner.reset()会重置所有内容并忘记异常.我在询问用户输入新内容之前先说了一下.

如果我说错了,那么正确的方法是什么?

解决方法

您误解了重置方法的目的:它可以重置与扫描程序关联的“元数据” – 它的空格,分隔符等.它不会改变其输入的状态,因此无法实现您的目标.

你需要的是next()的调用,它从Scanner中读取并丢弃任何String:

try {
    System.out.print("Enter an integer number: ");
    long i = in.nextLong();
    System.out.print("Thanks,you entered: ");
    System.out.println(i);
    break;
} catch (InputMismatchException ex) {
    System.out.println("Error in your input");
    in.next(); // Read and discard whatever string the user has entered
}

依靠异常来捕获异常情况是可以的,但是在调用next …方法之前使用has …方法更好的方法是使用has …方法,如下所示:

System.out.print("Enter an integer number: ");
if (!in.hasNextLong()) {
    in.next();
    continue;
}
long i = in.nextLong();
System.out.print("Thanks,you entered: ");
System.out.println(i);
break;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读