关于java中nextline读取空白行的问题

最近在做java作业, 发现了一个问题, 就是nextline其实会接收缓冲区的\r, 使得在程序运行时nextline像是跳过了一样, 其实不然, 它只是读取了上一个enter时的\r, 如我的如下功能代码

    public void run() {Scanner scan = new Scanner(System.in);int ord, book_order;int flag = 0;String isbn = new String();String nme = new String();while (flag == 0) {System.out.println("Function List:");System.out.println("1.Show the book list");System.out.println("2.Find book");System.out.println("3.Add book");System.out.println("4.Delete book");System.out.println("0.Exit");System.out.println("Please input the functon order:");ord = scan.nextInt();switch (ord) {case 0: {flag = 1;break;}case 1: {Print();break;}case 2: {Scanner in = new Scanner(System.in);System.out.println("Please input the ISBN of book you want to find:");isbn = in.nextLine();book_order = Find(isbn);if (book_order != 0) {System.out.println("Success!");System.out.println("Name:" + books[book_order].name);System.out.println("ISBN:" + books[book_order].ISBN);System.out.println();} else {System.out.println("Error!No such book!");System.out.println();}break;}case 3: {Scanner in = new Scanner(System.in);System.out.println("Please input the name of the book:");nme = scan.nextLine();System.out.println("Please input the ISBN of the book:");isbn = scan.nextLine();if (Add(nme, isbn)) {System.out.println("Add successfully!");System.out.println();} else {System.out.println("Failed to add!It's out of range!");System.out.println();}break;}case 4: {System.out.println("Please input the ISBN of book you want to delete:");isbn = scan.nextLine();if (Del(isbn)) {System.out.println("Delete successfully!");System.out.println();} else {System.out.println("Failed to delete!No such book!");System.out.println();}break;}}}scan.close();}
}

在这里, 我一开始就已经实例化了一个scanner对象, 命名为scan, 然后在输入功能选项时我们调用了nextInt, 那么在输入完之后, 整数被读取进去了, 但是那个\r还留在scan的buffer区域, 所以, 如果我们添加书籍的话, 再次使用scan的nextline来读取书名的话, nextline就会得到scan的buffer区域中的\r,导致程序错误, 所以,在这里看到老师的代码之后, 得到启发, 重新新建一个scanner对象, 在这里可以使用Scanner in, 这样的话, in的buffer区域中就没有之前存留的\n, 那么这个时候我们再输入一行, 则不会出现\r被读取的问题.

    public void run() {Scanner scan = new Scanner(System.in);int ord, book_order;int flag = 0;String isbn = new String();String nme = new String();while (flag == 0) {System.out.println("Function List:");System.out.println("1.Show the book list");System.out.println("2.Find book");System.out.println("3.Add book");System.out.println("4.Delete book");System.out.println("0.Exit");System.out.println("Please input the functon order:");ord = scan.nextInt();switch (ord) {case 0: {flag = 1;break;}case 1: {Print();break;}case 2: {Scanner in = new Scanner(System.in);System.out.println("Please input the ISBN of book you want to find:");isbn = in.nextLine();book_order = Find(isbn);if (book_order != 0) {System.out.println("Success!");System.out.println("Name:" + books[book_order].name);System.out.println("ISBN:" + books[book_order].ISBN);System.out.println();} else {System.out.println("Error!No such book!");System.out.println();}break;}case 3: {Scanner in = new Scanner(System.in);System.out.println("Please input the name of the book:");nme = in.nextLine();System.out.println("Please input the ISBN of the book:");isbn = in.nextLine();if (Add(nme, isbn)) {System.out.println("Add successfully!");System.out.println();} else {System.out.println("Failed to add!It's out of range!");System.out.println();}break;}case 4: {System.out.println("Please input the ISBN of book you want to delete:");isbn = scan.nextLine();if (Del(isbn)) {System.out.println("Delete successfully!");System.out.println();} else {System.out.println("Failed to delete!No such book!");System.out.println();}break;}}}scan.close();}
}

运行结果如下:
在这里插入图片描述
此外, 也可以和cpp一样, 使用一次scan.nextLine将那个\r读取.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐系统——协同过滤

协同过滤 协同过滤算法一般是通过用户之前的喜好或者相似的用户的喜好来推荐商品 基于领域的协同过滤算法一般有两种算法: 基于用户的协同过滤算法(UserCF):基于与用户相似用户的喜好进行推荐基于物品的协同过滤算法(ItemCF):基于用户喜好的物品寻找相似的物品进…

电感检测_几种常用的电流检测方式

RT1720 是一款最高输入电压可达 80V、输出电压可达 60V 的热插拔控制器,它的作用是防止系统受到过高电压和负电压的攻击,同时还能防范过电流可能导致的问题,它的一种应用电路大致如下图所示:为了检测负载电流的大小,RS…

推荐系统——矩阵分解FM

矩阵分解 隐语义模型与矩阵分解 之所以我们提出隐语义模型与矩阵分解,原因就是[[协同过滤]]存在泛化能力弱的问题 而对于隐语义模型而言,我们可以利用隐向量来代表隐藏信息 此外,也可以在一定程度上弥补[[协同过滤]]处理稀疏矩阵能力不足的…

千位分隔符的完整攻略

千位分隔符[1]是很常见的需求,但是输入文本千变万化,如何才能准确添加千分符呢? 纯整数情况 纯整数大概是所有情况里最简单的一种,我们只要正确匹配出千分位就好了。 观察上面的数字,我们可以得出千分位的特征是到字符…

限制按钮点击_Android | 使用 AspectJ 限制按钮快速点击

前言在Android开发中,限制按钮快速点击(按钮防抖)是一个常见的需求;在这篇文章里,我将介绍一种使用AspectJ的方法,基于注解处理器 & 运行时注解反射的原理。如果能帮上忙,请务必点赞加关注&…

svn不知道这样的主机 怎么解决_家里装修不知道怎么配置净水器,这几招教你轻松解决...

为了保障家庭饮水健康,很多业主都会选择在家中安装一台厨下净水器。但是,如若仅靠它来满足全家人日常洗漱,沐浴和饮用,这势必会极大地影响到全家人的生活品质。这个时候,实阳机电良心建议,全屋净水系统&…

redis系列:通过文章点赞排名案例学习sortedset命令

前言 这一篇文章将讲述Redis中的sortedset类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。 项目Github地址:https://github.com/rainbowda/learnWay/tree/master/learnRedis/case-sortedset 案例 demo功能是文章点赞排名等等&am…

xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践

自定义注释自定义注解指定xml文件模式上一篇文章详细阐述了xml配置文件的各种标签及其含义。其实从标签开始,每一个标签都对应一个实体类。context.class对应标签,而每一个子标签都对应一个属性;如图:标签与实体类的对应关系。有了…

nginx 配置详解_Nginx 配置详解

序言Nginx是lgor Sysoev为俄罗斯访问量第二的http://rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持Fast…

推荐系统——GBDT+LR

[[逻辑回归模型]] 逻辑回归是在[[线性回归]]的基础上添加了一个Sigmoid函数(非线形)映射,从而可以使逻辑回归成为一个优秀的分类算法 逻辑回归假设数据服从[[伯努利分布]],通过[[极大化似然函数]]的方法,运用[[梯度下降…

从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)

什么是燃尽图 燃尽图(burn down chart)是在项目完成之前,对需要完成的工作任务的一种可视化表示。理想情况下,该图表是一个向下的曲线,随着项目任务的逐渐完成“烧尽”至零。 燃尽图常常用于敏捷开发中,作为…

springtboot 引用子工程的文件_xmake从入门到精通11:如何组织构建大型工程

xmake是一个基于Lua的轻量级现代化c/c的项目构建工具,主要特点是:语法简单易上手,提供更加可读的项目维护,实现跨平台行为一致的构建体验。本文主要详细讲解下,如何通过配置子工程模块,来组织构建一个大规模…

依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?

SpringBoot中的起步依赖(starter)是一组特定功能的依赖项集合,SpringBoot通过starter来进行项目的依赖管理,而不是直接基于单独的依赖项来进行依赖管理。starter其实就是特殊的Maven依赖项或者Gradle依赖项,它把常用的库组合到一起构成了一个…

5g理论速度_5G是什么?5G速度有多快?

原标题:5G是什么?5G速度有多快?5G到底是什么东西?今年5G网络会普及吗?5G网速到底有多快,背后又有哪些黑科技?近日,全球首个5G火车站在上海虹桥火车站启动建设。而根据三大运营商的时…

c++ new一个结构体_「C/C++」构造类型及应用:数组、结构体、共用体、枚举类型...

3.1数组同类型、同性质、按顺序存放的一组数据集合,易于批量处理。3.1.1一维数组定义int 1.数组名为常量,指向首地址,由系统指定。2.数组长度为整型常量,但不能为03.上例取值image[0]-image[255],取值可以修改。初始化int 输入for…

自动产生fsm代码的工具_代码自动生成工具

构建支持多种数据库类型的代码自动生成工具背景:一般的业务代码中写来写去,无外乎是先建好model,然后针对这个model做些CRUD的操作。(主要针对单表的业务操作)针对于数据库dao、mapper等的代码自动生成已经有了mybatisGenerator这种工具&…

gtest测试框架使用详解_测试框架TestNG使用介绍

近期接触到了一个比较全面的基于Java的接口自动化测试框架,作为一名Java小白,所以打算研究一下,顺带学习学习Java,该测试框架的逻辑控制层使用的HttpClient TestNG。在本期中,给大家分享一下TestNG测试框架的基础知识…

LOJ#6282. 数列分块入门 6

一个动态的插入过程,还需要带有查询操作。 我可以把区间先分块,然后每个块块用vector来维护它的插入和查询操作,但是如果我现在这个块里的vector太大了,我可能的操作会变的太大,所以这时候我需要把现在里面的数全部拿出…

fragment在activity中的静态和动态用法_使用Matlab修改压缩Gif动态图片制作微信表情...

脚本之家你与百万开发者在一起作者:theOwlAndPussyCat/焦旭光引言电脑里存了很多有意思的Gif动态图片,闲暇想把这些动图全导入微信表情,可是这些动图很多大小超过了微信表情大小1MB的限制,要制作成表情只能压缩图像文件大小。网上…

frontcon函数用不了_C++复制构造函数与析构函数

想用机器人赋能未来,少不了扎实的编程的基本功,让我们跟着清华大学的C语言程序设计课程一起过一遍C的语法知识吧!当定义基本类型的变量时,经常会用已有的变量去初始化新定义的变量,当定义对象的时候也有类似的需求&…