首页 > 其他分享 >nextInt()之后nextLine()无法输入

nextInt()之后nextLine()无法输入

时间:2023-04-22 15:12:29浏览次数:25  
标签:nextLine 空白符 扫描 nextInt 缓冲区 方法 输入

本人也是刚开始学习java语言,在学习的过程中,老师让我们做一个模拟学生学籍管理系统的小程序。因为刚开始,做的是比较简单的,用switch语句做界面,然后配合Scanner 接收输入的数字进行跳转,完成各类操作。因为跳转时输入的是数字,而跳转后的操作要输入字符串,比如:“选择1添加学生信息…输入添加学生的姓名…”这类的操作在测试的时候总是无法输入字符串

就像这个样子,先用nextInt()再用nextLine()不会有接收字符串的效果。然后去网上查了一些资料,看了一些论坛,了解了一些其中的原理,整理一下。

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符。

nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉。

了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的方法。像是上边的代码nextInt()方法之后在缓冲区中留下了“\r”,然后nextLine()方法再去缓冲区找数据的时候首先看到了“\r”,然后就把这个“\r”扫描接收进来,并在缓冲区内清除掉。其实,nextLine()方法是执行过的,并没有不执行。

知道了原理,那么解决方法就比较简单了:

1:可以再nextInt()方法后面多加一句nextLine()方法专门用来取出缓冲区中留下的空白符,像这样:

像上边的第10行代码,就是专门用来取出缓冲区中残留的空白符的。

2:可以只用nextLine()方法,然后通过Integer类中的parseInt()方法解析成int数据。因为nextLine()方法会自动清理掉后边的空白符,这种方法就不会产生最开始那种错误了,

标签:nextLine,空白符,扫描,nextInt,缓冲区,方法,输入
From: https://www.cnblogs.com/jundong2177/p/17343115.html

相关文章

  • 标签,按钮和输入框及其参数说明
    Toga是一个Python的GUI工具包,提供了多种标准控件,如标签、按钮、输入框等,可以用于创建跨平台的GUI应用程序。以下是几种常用控件及其参数说明:1.标签-toga.Labeltoga.Label用于创建一个标签控件,用于显示静态文本。常用参数:text:标签显示的文本内容。style:标签的样式,如字体、......
  • C ++各个数据类型的输入输出
    C++中各个数据类型的输入输出主要使用iostream库和格式化输入输出函数printf、scanf等,下面是各个数据类型的输入输出方式:1.整型:使用cin和cout进行输入输出,或者使用scanf和printf进行输入输出。intn;cin>>n;cout<<n<<endl;scanf("%d",&n);printf("%d\n",n);2.浮点型:使......
  • [oeasy]python0136_接收输入_input函数_字符串_str
    输入变量回忆上次内容上次研究了一行赋值多个变量a=b=5a,b=7,8 还研究了标识符的惯用法python使用的是snake_case蛇形命名法用下划线分隔开小写字母的方法这样就可以更合理地命名变量了  变量变量能变的量......
  • [oeasy]python0136_接收输入_input函数_字符串_str
    输入变量回忆上次内容上次研究了一行赋值多个变量a=b=5a,b=7,8还研究了标识符的惯用法python使用的是snake_case蛇形命名法用下划线分隔开小写字母的方法这样就可以更合理地命名变量了变量变量能变的量我可以手工输入变量的值吗?......
  • C 语言各个数据类型的输入输出
    -1.整型(int)的输入输出: 输入: ```cintnum;printf("请输入一个整数:\n");scanf("%d",&num);//注意取地址符&``` 输出: ```cintnum=123;printf("这个数字是%d。\n",num);``` 2.浮点型(float和double)的输入输出: 输入: ```cfloatnum1;doubl......
  • bootstraptable单元格可输入(输入框,下拉框)
    https://blog.csdn.net/weixin_45742032/article/details/105145655bootstraptable单元格可输入效果图效果图一(单元格中加入下拉框,这里的数据是从数据库取的) <tableid="payment_detail_table"></table>js内容vartemplateTableParams={classes:"tabletable......
  • 标准输入、标准输出和标准错误3个文件描述符分别是什么
    Linux/Unix操作系统中有三个标准的输入输出(I/O)通道,分别是标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr),它们都是文件描述符,分别对应文件描述符号0、1、2。标准输入(stdin):程序从标准输入读入数据,默认情况下指向终端设备,通过输入键盘字符来提供输入数据。标准输出(stdout):程......
  • 不定长字符串的输入,保存
    不定长字符串的输入,保存对于输入一行随意大小的字符串求其长度并输入指定位上字符,用C++可以编程为:#include<iostream>#include<string>#include<cstring>usingnamespacestd;intmain(){intlen;stringstr;cin>>str;len=str.size();//也可用len=strlen(str.c......
  • 7、带输入的复数类-加-减-乘运算符重载
    如题,要求实现:1、复数类含两个参数的构造函数,一个为实部,一个为虚部。2、实现-加-减-乘运算符重载运算符重载功能,并实现返回值为复数类。3、Show出结果。例如输入78输出:(10+12i)(-4-4i)(-11+52i)#include<iostream>usingnamespacestd;classCmycomplex{private:......
  • 6、带输入的复数类加法运算符重载
    如题,要求实现:1、复数类含两个参数的构造函数,一个为实部,一个为虚部。2、实现加法运算符重载功能,并实现返回值为复数类。3、Show出结果。#include<iostream>usingnamespacestd;classCmycomplex{private:doublereal,imag;public:Cmycomplex(doubler=0,doubl......