繁体   English   中英

我的扫描仪的nextLine()方法不能正常工作,如何解决?

[英]My scanner's nextLine() method isn't working all inputs, how do I fix it?

我正在尝试编写一个超简单代码,其中给定一个整数,该整数的长度(总数字数)在输入控制台后打印出来。 我的代码正在成功打印所有数字,除了最后一个。 我经常遇到这个问题,无法找到适合我的解决方案。

从我迄今为止对我回答这个问题的很多研究中,我已经看到通常建议用户添加“nextLine()”语句,以便在结尾处跳过/ n字符。每一行,但这并没有完全解决我的问题,我仍然得到最后的运行时错误。

    int num = Integer.parseInt(q.next()); // First line of input is # of independent digits that follow, each listed on a line by themselves
    q.nextLine();

    while(num > 0)
    {
        System.out.println(q.next().length());
        q.nextLine();
        num--;
    }

我似乎在最后得到一个无限循环,因为程序永远不会停止运行。 上面的代码片段输入:5
200
1
3051

....打印出来:3
1

...虽然最后应该打印4个3051的数字。

那么你的程序按预期工作,但它可以简化并捕获错误的输入。

Scanner s = new Scanner(System.in);
final int numberOfIterations = Integer.parseInt(s.next());
for (int i = 0; i < numberOfIterations; i++) {
    System.out.println(s.next().length());
}
s.close();

但是,对于甚至不是数字的String,这不会失败,因此可以捕获这种情况:

Scanner s = new Scanner(System.in);
try {
    final int numberOfIterations = Integer.parseInt(s.next());
    for (int i = 0; i < numberOfIterations; i++) {
        final String input = s.next();
        Integer.parseInt(input);
        System.out.println(input.length());
    }
    s.close();
} catch (NumberFormatException e) {
    System.out.println("Bad input!");
}

还有使用模运算符计算位数的数学方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM