这一题使用Java比较容易猜的坑
查看原帖
这一题使用Java比较容易猜的坑
384471
VioletTec楼主2020/10/17 15:21

#0x0001 起因:

在刷这入门题的时候,想不明白为什么明明代码在本地运行的好好的,为什么上测试之后一堆RE image.png 于是决定下载一下测试点数据检查一下。


#0x0002 找原因

看了两次的测试点数据,发现了一个规律:

  • 在数字比较小的时候,测试输入内容为: image.png

  • 但是在输入数字比较大的时候,他却变成了分行输入

image.png

然后发现解题区域并无Java语言的答案,在看了几个CPP的答案之后,我发现了事情的原因。


#0x0003 原因

由于Java语言中Scanner类的next()方法与nextLine()方法区别甚大,第一次我的输入功能的代码为:

Scanner in = new Scanner(System.in);
int num = Integer.valueOf(in.next());
String numbersStr = in.nextLine();

这里的in.nextLine()为读取一行,而在测试的时候,如果数字过多,会分行输入,所以并不能直接输入一行。 而数字小的时候,的确只有一行,这该怎么做呢?


#0x0004 解决方法

使用Scanner的next()方法的特性,遇到空白字符则停止扫描 我们可以这样改进:

Scanner in = new Scanner(System.in);
int num = Integer.valueOf(in.next());
int[] nums = new int[num];
for(int i=0;i<num;i++) nums[i] = in.next();
//由于使用了next()方法,所以这就实现了循环用读取使用了任意空白字符(包括回车)分开的字符
//第一个数字为num(列车车厢个数)
//剩下的所有数字为列车车厢编号,循环存入int数组即可
2020/10/17 15:21
加载中...