我被困在程序的这一部分,用户输入多个整数,只选择第一个。在我当前的代码中,输出就是这个。
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命令是否会查看相同的输入位置?
(**附带的文字是用户输入。)
答案 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
。