忽略/清除用户输入的额外整数

时间:2016-09-30 22:15:42

标签: java input integer

我被困在程序的这一部分,用户输入多个整数,只选择第一个。在我当前的代码中,输出就是这个。

There are 10 sticks on the board.
Jerry: How many sticks do you take (1-3)? *1 3 4 2*
There are 9 sticks on the board.
Sherry: How many sticks do you take (1-3)? There are 6 sticks on the board.
Jerry: How many sticks do you take (1-3)? Please enter a number between 1 and 3.
Jerry: How many sticks do you take (1-3)? There are 4 sticks on the board.
Sherry: How many sticks do you take (1-3)? 

虽然在给定的例子中,输出是这个。

Jerry: How many sticks do you take (1-3)? *1 3 4 2*
There are 8 sticks on the board.
Pat: How many sticks do you take (1-3)? *3*
There are 5 sticks on the board.

似乎额外的整数排队等待下一个扫描仪输入命令。在给定的示例中,额外的整数被清除。这是怎么做到的?是否有一个命令来清除所有当前用户输入或是用.hasNextInt读入的所有整数,并且过去第一个被简单地抛弃?另外,hasNextInt在输入中的哪个位置?结果为true或false后,如果没有添加新输入,下一个hasNextInt命令是否会查看相同的输入位置?

(**附带的文字是用户输入。)

1 个答案:

答案 0 :(得分:0)

如果您无法确定用户是否正确输入输入,则可以接受String而不是int来执行此操作。像这样:

Scanner s = new Scanner(System.in);
System.out.print("How many?: ");
int many = Integer.parseInt(s.nextLine().trim().split(" ")[0]);
System.out.println(many);

这甚至可以处理像" 2 5 6 5"这样的输入以及你通过获取整个输入字符串的示例,修剪任何前导和尾随" ",将字符串拆分为{String数组1}}在" " s附近,并在索引0返回第一个(你想要的那个)。

正如所写的那样,它没有做的是处理像" foo bar 42"这样的输入或任何其他输入,其中拆分字符串的第一个索引不能被解析为整数。尝试这样做会产生NumberFormatException