CSDN话题挑战赛第2期 参赛话题:学习笔记
online judge,简称OJ,是一个在线的判题系统。
用户可以在线提交多种程序代码(比如:C、C++、Java、Python等),系统对源代码进行编译和执行,并通过预先设计的测试用例来检验程序源代码的正确性。现广泛应用于世界各地高校学生程序设计的训练、作业的自动提交判断,以及各种竞赛(比如ACM)等。
用户提交的程序在OJ系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。
问题:本地IDEA测试都是通过,一放到🐂客网上就不行?
关键点:
接下来引用一下🐂客网小小大佬的文章:
oj的java输入hasNext和hasNextLine区别
比如一道oj 题目的输入是这样的:
采用java语言的话,有的老铁这样处理输入输出:
Scanner in = new Scanner(System.in);
while (in.hasNextLine()) {
int n = in.nextInt();
//处理代码略
}
🐂客网的系统会提示错误,但是如果把hasNextLine改成hasNext或者hasNextInt的话,就会提示正确
while (in.hasNextInt()) {
int n = in.nextInt();
//处理代码略
}
这里要说明一下java中,hasNextLine和hasNext的区别。
先说结论: 采用has xxxx的话,后面也要用next xxxx。比如前面用hasNextLine,那么后面要用 nextLine 来处理输入。
说一下两个方法的区别:
private static final String LINE_SEPARATOR_PATTERN =
"\r\n|[\n\r\u2028\u2029\u0085]";
private static final String LINE_PATTERN = ".*("+LINE_SEPARATOR_PATTERN+")|.+$";
判题系统的所有测试用例都是存储在文件中,在上面的例子中,测试用例的文件为:
当处理完5后,没有非空字符了,hasNext返回了false,但是在linux系统中,5后面还有一个换行符\n,0X0A(有兴趣的老铁可以自己创建然后用二进制方式看一下文件)
所以 hasNextLine会返回true,但是其实后面并没有可以读的元素了,从而下面的in.nextInt会抛异常。
🐂客网上的刷题体验和💪code相比差的很远
招聘中很多公司都用的前者这套系统进行笔试题
建议还是多刷OJ题~~~