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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • log4j自定义layout_log4j使用教程

    log4j自定义layout_log4j使用教程如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:   %m输出代码中指定的消息    %p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL    %r输出自应用启动到输出该log信息耗费的毫秒数    %c输出所属的类目,通常就是所在类的全名    %t输出产生该日志事件的线

    2022年8月22日
    12
  • servlet是干什么的?

    servlet是干什么的?知乎上一个名为“servlet的本质是什么,它是如何工作的?”问题下面的各种回答,基本解答了我的疑问。感谢。现在,做一个知识的搬运工……1.浏览器发送一个HTTP请求,HTTP请求由Web容器分配给特定的Servlet进行处理,Servlet的本质是一个Java对象,这个对象拥有一系列的方法来处理HTTP请求。常见的方法有doGet(),doPost()等。Web容器中…

    2022年6月15日
    44
  • 利用前序和中序遍历构建二叉树的递归算法_二叉树先序遍历和后序遍历正好相反

    利用前序和中序遍历构建二叉树的递归算法_二叉树先序遍历和后序遍历正好相反前言在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最简单,后序遍历最难。我们的讨论基础是这样的:

    2025年10月23日
    4
  • 泛型(泛型擦除)【java基础—-泛型】

    泛型(泛型擦除)【java基础—-泛型】泛型(泛型擦除)【java基础—-泛型】

    2022年10月19日
    11
  • oracle amm和asmm,oracle AMM、ASMM区别以及相关用法

    oracle amm和asmm,oracle AMM、ASMM区别以及相关用法AMM:automaticmemorymanagement自动内存管理手动设置totalmemorysizeforthisinstancemaximummemorysizeforthisinstance数据库自动分配totalsgasizesgacomponentsizesinstancepgasizeindividualpgasizes即让数据库完全管理S…

    2022年6月7日
    46
  • 主流大数据存储解决方案评析

    主流大数据存储解决方案评析EMC Isilon:横向扩展 性能突出大数据存储不是一类单独的产品,它有很多实现方式。EMC Isilon存储事业部总经理杨兰江概括说,大数据存储应该具有以下一些特性:海量数据存储能力,可轻松管理PB级乃至数十PB的存储容量;具有全局命名空间,所有应用可以看到统一的文件系统视图;支持标准接口,应用无需修改可直接运行,并提供API接口进行面向对象的管理;读写性能优异,聚合带宽高达数GB乃至数十GB…

    2022年6月2日
    47

发表回复

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

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