今天在写一个java小程序中碰到一个问题:循环输入时,我的下次输入会跳过nextline这个输入语句;
如下所示,刚开始没有找到原因,后来发现是nextLine()的问题,所以写下来提醒自己
输入商品名:y
输入商品价格:56
输入商品数量:6
dsf
1
[Goods [name=y, price=56.0, num=6]]
输入商品名:输入商品价格:
next()
next()方法在读取输入内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其过滤掉;只有在读取到有效字符之后,next()方法才将其后的空格键、Tab键或Enter键等视为结束符;所以next()方法不能得到带空格的字符串,所有的
nextLine()
而nextLine()方法的结束符只有Enter键,不会过滤输入文字前的空格和其他键值
代码的部分截取
Goods good;
int i=0;
double ss=0;
Scanner scanner = new Scanner(System.in);
List<Goods> a = new ArrayList<Goods>();
while(true) {
good= new Goods();
System.out.print("输入商品名:");
String name = scanner.nextLine();//用的nextLine();
good.setName(name);
System.out.print("输入商品价格:");
double price = scanner.nextDouble();
good.setPrice(price);
System.out.print("输入商品数量:");
int num = scanner.nextInt();
good.setNum(num);
if(name.isEmpty()) {
break;
}else {
a.add(good);
i++;
System.out.println("dsf");
System.out.println(i);
System.out.println(a);
}
}
运行输入:在最后的商品数量的后面添加了几个空格,可以发现这后面的空格被nextLine() 自动捕捉了,
但还有一个问题,我在最后输入商品按下enter后,也会出现商品名无法输入的问题:
后来在网上看到了这样的一句话:
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。
修改的办法就是将nextLine改为next,或者在后面结束语句后面在加上一句:scanner.nextLine();