我的扫描仪的nextLine()方法不能处理所有输入,如何解决?

时间:2019-05-31 20:28:58

标签: java printing

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

到目前为止,根据我对回答此问题的人们的大量研究,我发现通常建议用户添加“ 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的位数。

1 个答案:

答案 0 :(得分:0)

这是行不通的,因为您正在读取两行而不是一行。 q.nextLine()的使用不是必需的,实际上,它会阻止程序计算第一个输入的长度,而是打印第二个输入的长度。另外,您的程序的运行频率与您的第一个输入相同,我认为这不是理想的行为。但是,您的程序还有另一个缺陷,因为它不计算数字的位数,而只是打印任何给定String的长度,这也可以简化为:

Scanner c = new Scanner(System.in);
while(true) {
    System.out.println(c.next().length());
}

但是对于一个连数字都不是的字符串,这都不会失败,因此可以发现这种情况:

Scanner c = new Scanner(System.in);
while (true) {
    String input = c.next();
    try {
        Integer.parseInt(input);
        System.out.println(input.length());
    } catch (NumberFormatException e) {
        System.out.println("That was not a number!");
    }
}

还有一种数学方法可以使用模运算符计算位数。