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()则会,简单验证了想法。

给新手的学习建议

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

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值