nextline函数_Java中的nextline()函数与next()问题

nextline函数_Java中的nextline()函数与next()问题【写在前面】importJava.util.*;Scannerin=newScanner(http://System.in);【出现的问题】在循环中相连的nextLine();会出现第一个nextLine();跳过的问题.就像这个样子://部分代码for(inti=0;iSystem.out.println();Stringname=in.nextLine();System.o…

大家好,又见面了,我是你们的朋友全栈君。

【写在前面】

import Java.util.*;

Scanner in = new Scanner(http://System.in);

【出现的问题】

在循环中相连的nextLine();会出现第一个nextLine();跳过的问题.就像这个样子:

//部分代码

for(int i=0; i

System.out.println();

String name = in.nextLine();

System.out.printf(“第%d所学校校长名字是?”,(i+1));

System.out.println();

String master = in.nextLine();

System.out.printf(“第%d所学校建校时间是哪一年?”,(i+1));

System.out.println();

int time = in.nextInt();

sch[i] = new School(name,master,time);

}

【问题分析】

必要的知识:in.nextLine();不能放在in.nextInt();代码段后面

否则in.nextLine();会读入”\n”字符,但”\n”并不会成为返回的字符

因为nextInt();接收一个整型字符,不会读取\n,nextline();读入一行文本,会读入”\n”字符,但”\n”并不会成为返回的字符

那么问题就在于for循环中的三个输入等待中,前两个是字符串(学校名称、校长姓名)最后一个是整型(建校时间),

在第一次循环时并没有什么问题,但当循环进入第二次时,第一次循环输入的班级数目(假设为2),我们输入的是”2\n”,

nextInt();扫描了2这个值并返回(没有读取”\n”字符),而第二次循环一开始的nextLine();接收了上一个循环最后输入的”\n”字符,

然而”\n”并不会成为返回字符,所以看起来有一种“跳过”的假象。

【解决方案】

接下来我们来看看解决方案

方案1:(不推荐)

将Scanner in = new Scanner(http://System.in);放入循环体,因为只循环一次的话并不存在问题,所以可以解决“跳过”的问题。

方案2:

解决在nextInt();后的nextLine();会接收”\n”的问题,可以在他们中间加一个in.nextLine();语句来接收这个”\n”。

方案3:(可接收含空格的字符串,后文有说)

必要的知识:

next();这个函数会扫描从有效字符起到空格,Tab,回车等结束字符之间的内容并作为String返回。

nextLine();这个函数在你输入完一些东西之后按下回车则视为输入结束,输入的内容将被作为String返回。

next();这个函数与之不同在于,next();什么都不输入直接敲回车不会返回,而nextLine()即使不输入东西直接敲回车也会返回。

再举个例子,输入” abc def gh\n”,next();会返回abc,而nextLine();会返回 abc def gh\n,我们看到的是 abc def gh

//附上代码

import java.util.*;

public class testScanner{

public static void main(String[]args){

Scanner in = new Scanner(http://System.in);

String str = in.nextLine();

//String str = in.next();可自行将上一行代码更换为此行代码尝试

System.out.println(str);

}

}

所以把代码中的nextLine();换成next();便可以解决“跳过”问题。(因为next();不把上个循环的最后一个”\n”看成有效字符)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134695.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Iris数据集免费下载[通俗易懂]

    Iris数据集免费下载[通俗易懂]CSDN下载的iris数据集都需要积分和币,这里我提供百度云链接免费下载链接:https://pan.baidu.com/s/1ReA5RjAUvph0BYyYIHBlYg提取码:2grr恳请下载好的小伙伴点赞留言,蟹蟹更多AI资源请关注公众号:大胡子的AI欢迎各位AI爱好者加入群聊交流学习:882345565(内有大量免费资源哦!)…

    2022年10月17日
    2
  • java voliate_voliate关键字及其示例

    java voliate_voliate关键字及其示例voliate关键字1使变量在线程间可见对于避免不可见性问题,Java还提供了一种弱形式的同步,即使用了volatile关键字。该关键字确保了对一个变量的更新对其他线程可见。当一个变量被声明为volatile时候,线程写入时候不会把值缓存在寄存器或者或者在其他地方,当线程读取的时候会从主内存重新获取最新值,而不是使用当前线程的拷贝内存变量值。volatile虽然提供了可见性保证,但是不能使用他来…

    2022年4月29日
    84
  • 旁路由设置的正确方式

    旁路由设置的正确方式最近在玩旁路由,踩了一些坑,也学习了点相关知识,特整理记录下。一、旁路由的配置上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,可以把它想成一个普通的连接路由器的电脑。让他们ip在一个网段即可,比如主路由网关192.168.3.1,旁路由配置成192.168.3.21.主路由配置:DHCP配置,把网关和DNS改成旁路由ip地址,如192.168.3.2。2.旁路由配置:关闭DHCP,把网关改成主路由地址,如192.168.3.1,关闭桥接模式。这样配置后,网络流量如下图:.

    2022年6月14日
    54
  • Python打包exe,以及解决闪退

    Python打包exe,以及解决闪退Python打包exe打开终端,中输入命令pipinstallpyinstaller后回车。安装失败尝试用管理员方式打开输入命令pyinstaller,回车显示安装成功。3.打开pycharm的底部的【Terminal】输入:pyinstaller–console–onefile······.py,或者在路径下按住shift右键单击空白打开powershel…

    2022年5月18日
    48
  • java数组反转,Java数组反转

    java数组反转,Java数组反转本篇文章帮大家学习java数组反转,包含了Java数组反转使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。以下实例中我们使用Collections.reverse(ArrayList)将数组进行反转:importjava.util.ArrayList;importjava.util.Collections;publicclassMain{publicst…

    2022年5月18日
    43
  • 不止一个背包的背包问题_背包问题 java

    不止一个背包的背包问题_背包问题 java有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品个数和背包容量。接下来有 N

    2022年8月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号