Java,Scanner的nextLine读入空行问题

这里写自定义目录标题

    • 问题简述
    • 简析原因
    • 继续验证
    • 给新手的学习建议

问题简述

一些教材在讲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()则会,简单验证了想法。

给新手的学习建议

多查看原包的说明,可以参考网友在建议,但强烈建议自己代码试试,这样最直观有效。

你可能感兴趣的:(技术)