我正在尝试编写一个超级简单的代码,其中给定一个整数,该整数的长度(总位数)在输入到控制台后会打印出来。我的代码成功打印了除最后一个数字以外的所有数字。我经常遇到此问题,无法获得适合我的解决方案。
到目前为止,根据我对回答此问题的人们的大量研究,我发现通常建议用户添加“ 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的位数。
答案 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!");
}
}
还有一种数学方法可以使用模运算符计算位数。