欢迎您访问新华电脑学校官方网站!官网

您的位置:首页>新闻资讯>就业新闻

在阿里笔试中拿了0分,竟是因为分不清楚Java输入类nextLine与nex

发布时间:2020-05-22  作者:未知 浏览量:117

以前做算法题,都是实现一个方法,需要的参数会在方法参数中直接给出,而且需要的返回值直接在方法中 return 就好了。但是阿里的笔试,需要的参数居然要到输入流中读取,而且返回结果居然直接输出到控制台上。
如果没有见过这种套路的,当使用Java输入类nextLine方法读取输入流中的字符串时,总会莫名其妙地少读一部分!那在这里,让我们新华的专业讲师来给大家带来一场专业的分析。
 
读取一个数字
 
既然我们要读取输入,肯定得用到 Scanner 类,这个类倒是挺简单的,例如,我们需要读取一个数字,可以这样子设计程序。
 
package test;
 
import java.util.Scanner;
 
public class HelloWorld {
 
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
System.out.println("读取到的数字是:" + i);
    }
}
 
我们随意输入一个数字 100,控制台的输出也证明了我们的程序可以读取这个数字。
 
好了,重点来了!读取数字倒没什么,读取字符串会要了老命!读取数据的时候如果一直尝试使用nextLine这个方法来读取字符串(如果我们不知道next这个方法时),nextLine读出来的数据总是缺斤少两!
 
我们来还原一下现场,需求是这样的,需要我们读取一个数字,这个数字表示输入字符串的数量,然后下面跟着的就是一系列需要读入的字符串了,很多人在做这道题时想都没想,大笔一挥,写下如下代码:
 
package test;
 
import java.util.Scanner;
 
public class HelloWorld {
 
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();//读取的字符串数量
int index = 0;
String[] array = new String [i];//存放读取的字符串
while(index < i) {
array[index++] = sc.nextLine();
}
for (String str : array) {//输出读取的字符串
System.out.println("输入的字符串:" + str);
}
    }
}
 
理想很美好,现实很骨感,写代码时光芒万丈,检查时却怨天尤人。这样的代码永远无法读取最后一行输入的字符串,这是为啥呢?
 
因为nextLine可以接收空格或者tab键,其输入以enter键结束。
 
程序在通过 nextInt 方法读取数字之后,会留下一个enter键,这个enter键会被第一个执行的nextLine函数接收,这导致我们能够读取的数据永远少一行(nextLine少执行一次),同时也能解释为什么字符串数组第一个元素为空。
 
这个问题怎么解决呢?Java 输入类读取字符串的函数并非只有nextLine,通过next也能实现类似的功能,只不过next与nextLine不同,next不会接收回车符,tab或者空格键。在我们使用 nextLine时,需要注意前面是否有enter键,如果有,就会被nextLine吸收,从而造成bug!
 
既然明白了nextLine与next的原理,解决问题就变得简单了,将读取字符串的函数由nextLine改为next便可,这样就不会吸收nextInt留下的enter键了。改进过的程序如下:
 
package test;
 
import java.util.Scanner;
 
public class HelloWorld {
 
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();//读取的字符串数量
int index = 0;
String[] array = new String [i];//存放读取的字符串
while(index < i) {
array[index++] = sc.next();
}
for (String str : array) {//输出读取的字符串
System.out.println("输入的字符串:" + str);
}
    }
}
 
总结
 
最后我们再来总结一下nextLine与next两个方法的区别:
 
next不会接收回车符,tab或者空格键,在接收有效数据之前会忽略这些符号,若已经读取了有效数据,遇到这些符号会直接退出,而nextLine 可以接收空格或者tab键,其输入以 enter 键结束。
 
如果也想像一名资深程序员一样解决如此专业的问题,快到石家庄新华电脑学校来学习吧!

常见问题

热招专业

在线报名


电话:400-900-8780

地址:河北省石家庄市桥西区南二环西路199号,南二环与红旗大街交叉口西行300米路北

冀ICP备11012044号 | 版权所有:石家庄新华电脑学校

工信部备案管理系统网址:https://beian.miit.gov.cn/

  • 官方快手账号

  • 官方视频号

  • 官方公众号

网站声明:任何企业或者个人以任何形式复制或传递本网站所载述的域名商标、文字、视像及声音内容、图形及图像应当注明来源于本网站