OOP实验猪脚说——第一期 #
前言 #
因为同学们的共性问题非常多,所以各位助教(猪脚)总结并写了下来方便各位查阅,不定期更新,希望能帮到大家。
迭代实验 #
前置步骤 #
Windows用户 #
下载群内提供的
patpat示例教程.zip
并解压,使用方式在其中的README.md
中有详细说明。为了防止大家懒得看,也可以看接下来的步骤;patpat-windows-amd64.exe
需要重新命名为patpat.exe
;在
patpat示例教程
下打开终端(命令行)运行如下命令:./patpat reg -sid your_sid -pwd your_password # 如./patpat reg -sid 18373722 -pwd buaa-se-oop
账号创建后,密码不支持修改。如需修改,请联系助教。
macOS或Linux用户 #
下载群内提供的
patpat示例教程.zip
并解压,使用方式在其中的README.md
中有详细说明。为了防止大家懒得看,也可以看接下来的步骤;下载群内提供的
patpat各版本.zip
并解压,选择正确的版本移入patpat示例教程
文件夹中,替换并删除掉原有的patpat-windows-amd64.exe
;替换后的文件需要重新命名为
patpat
;在
patpat示例教程
下打开终端(命令行)运行chmod +x patpat
,使评测机程序具有可执行权限;在
patpat示例教程
下打开终端(命令行)运行如下命令:./patpat reg -sid your_sid -pwd your_password # 如./patpat reg -sid 18373722 -pwd buaa-se-oop
账号创建后,密码不支持修改。如需修改,请联系助教。
实验具体流程 #
编写完迭代作业的代码;
建立一个
n-学号-姓名
的文件夹在patpat示例教程
下,其内建立out
文件夹(out
是n-学号-姓名
文件夹的子孙);把你idea中的
src
文件夹直接复制粘入n-学号-姓名
中 (src
是out
的兄弟);终端(命令行)中运行
./patpat ta -judge 1-学号-姓名 -pwd your_pwd -tag 随意打一些文字,可以用来标注第几次尝试 # 线上测试命令
命令(不是stu命令不是stu命令不是stu命令,自己编写测试文件和stu自测基本上用不到,只是提供了这么个功能,完全没必要用,我上次就没用过);
patpat给出所有测试点AC(重要!!不满足ta命令全AC你的迭代作业不会有分数);
打包
n-学号-姓名
文件夹交到云平台对应实验中。
常见错误 #
编码格式有误,最简单粗暴的方法:删除中文注释或改成英文注释。或者调整文件编码与默认编码格式一致。
已知 JDK 18 版本主要集中在 9 个增强功能上,其中之一即是将 UTF-8 设置为标准 Java API 的默认字符集。在 JDK 17 及更早版本中,默认字符集要在 Java 虚拟机运行时才能确定,所以取决于不同的操作系统、语言环境等因素,在实现和处理方面存在着一些问题。而从Java 18开始,依赖于默认字符集的 API 会在所有实现、操作系统、语言环境和配置中保持一致。
项目结构有误,所有Java文件应直接放在
src
文件夹下,此时应没有任何package
语句。文件路径有误,在涉及文件读写时注意文件路径,在使用patpat运行时目录是在patpat所在目录,例如访问
src
文件夹应./1-学号-姓名/src
这样去访问,建议在访问或创建文件/文件夹时逐级判断文件夹是否存在,若不存在则创建或抛出异常。关于TLE:我们没有特别限制迭代任务的时长,如果有这种情况一定是有BUG的,请自查。不过还有一种特殊情况会导致TLE,那就是你的代码中new了多个Scanner实例,patpat仅支持单一Scanner实例,这点非常重要,请检查。
关于RE:只要exit code不为0,那一定是发生了异常但是你没有try-catch,导致异常直接被抛出,程序终止运行。这种情况你的程序是一定存在bug的,通用的做法是使用try-catch包裹可能会抛出异常的代码段,并用println打印出异常信息,这样你就可以知道是哪里出了问题了,即使是在patpat评测中,发生了异常你的输出也会被打印在“实际输出行”中,方便debug。大致的检查方向是:NPE、IO异常、数组越界、除0异常、类型转换异常、NumberFormatException(Integer.parseInt)等等。
基础知识 #
关于javac
和java
命令
#
Java执行class文件是根据CLASSPATH指定的地方来找,而非当前目录。如果希望它查询当前目录,需要在CLASSPATH中加入.;
,代表当前目录,分号用于隔开不同查询目录。
可以使用 -cp . 来临时设置CLASSPATH为当前目录,只对本次执行有效。
在使用例如javac -d out ./src/test/*.java
进行打包编译后,在运行时需要带上包名,例如:
cd out
java test.Test // 假定Test为主类
从String
类型了解引用数据类型
#
Java基础之String类型详解_阿星_Alex的博客-CSDN博客_javastring类型
Java的引用与C的指针比较 #
Java中的“引用类型”和C中的“指针”区别_chengwei1128的博客-CSDN博客_c语言指针和java引用区别