问题简述
一些教材在讲Scanner在时候,讲了nextInt(),nextFloat()和nextDouble(),却唯独不讲nextLine(),试着让孩子们自己探索了一下,但效果不佳,欣慰在是总算有人提出了问题。此处简答一下。
##基本代码
import java.util.*;
class Test
{
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
System.out.println("Input a number:");
double sco=reader.nextDouble();
System.out.println("test out0 "+sco);
String str=reader.nextLine();
System.out.println("test out2 "+str);
}
}
这种情况,会发现没有办法输入第二个数,直接输出了。学生发现加一句就可以了,什么情况?
import java.util.*;
class Test
{
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
System.out.println("Input a number:");
double sco=reader.nextDouble();
System.out.println("test out0 "+sco);
String str0=reader.nextLine(); //不知原因?但可以实现效果
String str=reader.nextLine();
System.out.println("test out2 "+str);
}
}
简析原因
nextLine()其实就是读一行,而一行在结束是回车,所以它读到回车结束。
而nextDouble()之类在读到空格或回车,此处读到空格结束,剩下回车在内存,被下一次在nextLine()读入,直接输出了。
继续验证
import java.util.*;
class Test
{
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
System.out.println("Input a number:");
//double sco=reader.nextDouble();
String sco=reader.nextLine();
System.out.println("test out0 "+sco);
String str0=reader.nextLine();
System.out.println("test out1 "+str0);
String str=reader.nextLine();
System.out.println("test out2 "+str);
}
}
第一次就使用nextLine()则不会残留回车,使用nextDouble()则会,简单验证了想法。
给新手的学习建议
多查看原包的说明,可以参考网友在建议,但强烈建议自己代码试试,这样最直观有效。