Scanner类中的nextLine()产生的换行符问题

Scanner类中的nextLine()产生的换行符问题

Scanner中,nextInt()不会读取或识别用户输入的和遗留的换行符,但是nextLine()会识别

本文章纯属原创,转载请注明作者,谢谢

代码块

例如:


System.out.print("请输入水果价格:");
fruit.setPrice(input.nextInt());
System.out.print("请输入水果数量:");
fruit.setCount(input.nextInt());
System.out.print("请输入水果描述:");
fruit.setIntroduction(input.nextLine());

在输入的过程中,nextInt()没有读取上一次输入nextInt()输入时留下的“\n”
但是nextLine()读取了上一次输入nextInt()留下的“\n”,所以没有给用户输入(软件认为用户输了一个”\n”),而是直接换行了。

请输入水果名称:apple
请输入水果价格:10
请输入水果数量:20
请输入水果描述:添加成功

修改方法:将nextLine()会读入但不需要的”\n”过滤掉。如下面的if操作:

System.out.print("请输入水果价格:");
fruit.setPrice(input.nextInt());
System.out.print("请输入水果数量:");
fruit.setCount(input.nextInt());
/*此处的if判断作用为消除inpu.nexInt()语句遗留下来的"\n",inpu.nexInt()不会读取换行符,但是inpu.nextLine()会读取换行符,如果此处不处理,则在执行下面的input.nextLine()时会读取上一次输入时遗留的换行符,然后直接换行,不会读取用户的输入数据(或者说用户根本就无法输入数据)*/
if (input.nextLine() != "\n") {
}
System.out.print("请输入水果描述:");
fruit.setIntroduction(input.nextLine());

运行结果:

请输入水果名称:apple
请输入水果价格:10
请输入水果数量:50
请输入水果描述:very well
添加成功

当然用户也可以按照下列的方式进行过滤。(强迫症,不能忍,所以写了上面的那种方法,输出结果请自行调试)

System.out.print("请输入水果价格:");
fruit.setPrice(input.nextInt());
System.out.print("请输入水果数量:");
fruit.setCount(input.nextInt());

input.nextLine();
-----------------

System.out.print("请输入水果描述:");
fruit.setIntroduction(input.nextLine());

注意:有时nextLine()这行并不会报错,但是问题却是产生于这一行,使用过程中一定要小心。
建议:能不用时尽量不要使用nextLine(),尽量使用next()。


你可能感兴趣的:(新手,java)