一、控制台输入
错误——第一次测评时我的问题是控制台输入,代码如下:
Scanner s = new Scanner(System.in);
//通过new Scanner(System.in)创建一个Scanner,
//控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。
System.out.println("请输入要生成四则运算式的个数(0~1000):");
OperationalFormula = s.nextInt();//从操作台输入运算式的个数
System.out.println("请输入每个运算式包含的的运算符的个数(3~5):");
operator = s.nextInt();//从操作台输入运算符的个数
修改——而这样无法进行命令行输出,所以第一次测评后,我加了一个try—catch,代码如下:
try{
OperationalFormula=Integer.parseInt(args[0]);
if(OperationalFormula>1002||OperationalFormula<0){
System.out.println("数值不符合要求,请重输");
}
}catch(Exception e){
System.out.println("数值不符合要求,请重输1");
}
这样修改后,命令行可以输出,但是必须加上utf—8,换行后输入100,再换行才可以。原因是有用Scanner输入的中文提示。
二、编译错误,不支持utf—8和gbk编译
错误——第二次测评时我的问题是编译错误,不支持utf—8和gbk编译。找了大佬宇欣发现是测评程序必须是输入Java Main 100,然后程序运行结果输出到result文件里。
修改——把Scanner输入的中文提示删掉,Main文件改为代码如下:
import java.io.IOException;
public class Main {
public static void main(String args[]) {
String[] questionList = new String[1001];//开了一个0~1001的数组,即长度为1001
int OperationalFormula=0;//定义了一个运算式个数
try {
OperationalFormula = Integer.parseInt(args[0]);// 输入出题的运算式个数
} catch (Exception e) {
System.out.println("请输入正整数作为参数");
}
if(OperationalFormula>0){
Lib.makeQuestions(questionList, OperationalFormula);
//调用Lib中的makeQuestions函数
try {
Lib.Filefile(questionList, OperationalFormula);
//调用Lib中的文件将结果输出到path里面
}
catch(IOException ioe) {
System.out.println("文件生成错误");
}//将makeQuestions中的OperationalFormula个运算式和结果输出到path文件里
}
}
}
这样修改后,即可成功符合要求命令行输出了。
三、偶尔出现超大数
错误——运行时偶尔会出现超级大的乘数。
修改——找了大佬晓真,多运行几次,排查后发现是大数都是出现在乘号后面。后来发现我的乘号后面的数的生成条件没有必要,直接注释掉就没有这种情况了,代码如下:
else if( QuestionOfOp[j] == '*') {
// QuestionOfNum[j] = (int)(Math.random()*20);
// QuestionOfNum[j+1] = (int)(Math.random()*100/QuestionOfNum[j]);
}
原来的代码:
else if( QuestionOfOp[j] == '*') {
QuestionOfNum[j] = (int)(Math.random()*20);
QuestionOfNum[j+1] = (int)(Math.random()*100/QuestionOfNum[j]);
}
四、偶尔出现负数
错误——运行时偶尔会出现负数。
修改——找了大佬晓真,多运行几次,排查后发现是负数都是出现在减号后面。后来发现我的减号后面的数的生成条件有误,改后的代码如下:
if( QuestionOfOp[j] == '-') {
String dis = "" + QuestionOfNum[0];
for(int k=0; k<j; k++)
dis = dis + QuestionOfOp[k] + QuestionOfNum[k+1];
int Num = calQuestion(dis);
if(Num<0){
flag = false;
break;
}
if(Num<=100){
QuestionOfNum[j+1] = (int)(Math.random()*Num);
}else{
QuestionOfNum[j+1] = (int)(Math.random()*100);
}
}
原来的代码:
if( QuestionOfOp[j] == '-') {
String dis = "" + QuestionOfNum[0];
for(int k=0; k<j; k++)
dis = dis + QuestionOfOp[k] + QuestionOfNum[k+1];
int Num = calQuestion(dis);
QuestionOfNum[j+1] = (int)(Math.random()*Num);
}