在参加了百度、网易雷火、网易互娱、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()就根本没有起任何作用!!!!
这是问题之一。。。