我的个人项目作业错误及解决办法

一、控制台输入

错误——第一次测评时我的问题是控制台输入,代码如下:

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);
						
					}

 

posted @ 2018-04-21 23:02  caoying  阅读(219)  评论(6编辑  收藏  举报