我正在使用扫描仪进行用户输入,并希望存储从命令行给出的2个参数,但我怎么只能得到一个。 另外我相信如果有nextInt,hasNextInt()会返回布尔值,但是当我输入非int值时,它不会破坏循环。
在发布此问题之前,我已经在线查看了源码和stackoverflow,但没有得到我想要的内容。
Scanner s = new Scanner(System.in);
int first = 0;
int second = 0;
System.out.println("Please enter number: ");
s.useDelimiter(",");
while (s.hasNextInt()) {
first = s.nextInt();
System.out.print("firstArgument: " + first + "\n");
second = s.nextInt();
System.out.print("secondArgument: " + second + "\n");
}
答案 0 :(得分:2)
问题是您的代码为每个奇数编号的输入调用s.hasNextInt()
,但它尝试在不执行检查的情况下获取每个偶数编号的输入。因此,它需要这样的输入:
1,2,3,4,5,6,done
1,2,3,4,done
1,2,done
但是,像这样的输入会导致异常:
1,2,3,4,5,done
1,2,3,done
1,done
请注意,非数字输入必须出现在同一行的逗号之后。
要解决此问题,请在读取第二个值之前添加一个检查:
while (s.hasNextInt()) {
first = s.nextInt();
if (!s.hasNextInt()) break'
second = s.nextInt();
System.out.print("firstArgument: " + first + "\n");
System.out.print("secondArgument: " + second + "\n");
}
如果您希望允许其他字符(例如行尾标记)结束以逗号分隔的列表,请为分隔符使用不同的表达式:
s.useDelimiter("[,\n]");