记一次在关于本地IDE能AC,牛客平台却显示数组越界问题——输入处理带来的问题!!!!

博主在参加多次互联网公司笔试时遇到数组越界的难题,发现在本地IDE中能正确运行的代码在牛客平台上会出现问题。经过排查,发现关键在于`nextInt()`和`nextLine()`的使用不当。当调用`nextInt()`后,输入的数字会被读取,但剩余的空格和数字会留在输入流中,`nextLine()`无法正确读取。解决方案是删除`nextLine()`,或者在`nextInt()`后使用`sc.nextLine()`消耗掉多余的输入。
摘要由CSDN通过智能技术生成

在参加了百度、网易雷火、网易互娱、360笔试之后,被频繁遇到的数组越界问题深深困扰,为什么在eclipse上怎么测试,怎么看代码都找不到数组越界越在哪,不禁发出越你姥姥的惊叹。。。

今天晚上再次遇到这个问题,在查看了各种遇到此类问题的帖子后,终于找出问题。。。

先看下面的输入测试:

4
1 3 15 17

先读取第一行数字4作为数组长度,然后创建一个4长度的数组来存放1 3 15 17。

我的思路是先用sc.nextInt()将4读取到一个int变量中,然后调用sc.nextLine()方法扫描剩下的内容直至遇到换行符。

Scanner的next()方法和nextLine()方法的区别:
1.next()从遇到第一个有效字符(非空格、换行符)开始扫描,
遇到第一个分隔符或结束符(空格’ ‘或者换行符 ‘\n’)时结束。
2.nextLine()则是扫描剩下的所有字符串知道遇到回车为止

再通过调用一个for循环将1 3 5 17放入数组:

			for (int i = 0; i < n; i++) {
				nums[i] = sc.nextInt();
			}

然后再进行数组的操作。这是完全没问题的,当然只是在控制台上进行输入时,是完全没问题的,因为在调用第一个sc.nextInt()方法时,当你敲击回车,这个方法就运行结束了,这样4也被读入到了int变量中,而当你接着输入1 3 15 17 时,sc.nextLine()就根本没有起任何作用!!!!

这是问题之一。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值