主要功能:运算小学四则运算,可以选择加减乘除以及混合运算。

除了整数以外,还要支持真分数的四则运算。 (例如:  1/6 + 1/8 = 7/24)

思考:

1.支持整数和分数,基本数据类型难以满足,考虑新建一个封装的类number,含有numerator和denominator,表示分子分母,整数的分母为1;

2.随机生成题目,考虑调用库函数中的随机数生成数字和符号和题目长度;

3.考虑到JAVA在处理字符串方面使用更为简便,本次程序采用JAVA语言编写。

代码核心:

number部分只显示了框架,对功能进行了封装,可能有些冗余写的比较长,所有代码在

上进行了开源,开源部分多包含了Question2.java 和 Test.java ,Question2.java 是开始写的不能处理真分数的一个生成程序的框架,Test.java是对numer类进行测试的代码,只保留了最后一次测试的代码。

测试:

在测试代码完善功能的过程中,对程序进行了微小的修改,主要是对随机数范围进行修改(因为感觉题太难了==),最后设置在25题,每道题长度(number个数)在【3,5】之间,数的取值范围不超过20,每道题答题后会立即显示正确答案和正确与否的判定,正确答案将以整数或分数形式显示,所有题做完后会显示正确率。答题时按回车被视为放弃回答,被判为错误,结果支持整数,分数和小数形式,小数形式误差不超过1e-5被视为正确答案,输入格式错误被判定为错误如“233..”,“2/2/e”,“2 / 3 3”等,数字之间不能用空格隔开,“22/”被视为等同于“22”。每次答题情况都会被追加在文件里,第一行会先记录答题开始的时刻,默认存储文件是"out.txt",也可以在命令行指定新的文件名进行存储。

java 辅助类作用 java写辅助_System

java 辅助类作用 java写辅助_java编写一个小学辅助软件_02

java 辅助类作用 java写辅助_java编写一个小学辅助软件_03

java 辅助类作用 java写辅助_Math_04

java 辅助类作用 java写辅助_java_05

java 辅助类作用 java写辅助_Math_06

java 辅助类作用 java写辅助_Math_07

java 辅助类作用 java写辅助_java编写一个小学辅助软件_08

1 packagecalc;2
3 public classnumber {4 private intnumerator,denominator;5
6 publicnumber() {7 }8
9 publicnumber (String str) {10 }11
12
13 public number(inta) {14 }15
16 public number(int a, intb){17 }18
19 public void set(inta) {20 }21
22 public void set(int a,intb) {23 }24
25 publicString toString() {26 }27
28 public voidcheck(){29 }30
31
32 public booleanequals(number n2) {33 }34
35 publicnumber yuefen() {36 }37
38
39 publicnumber add(number n2){40 }41
42 private int gcd(int n1,intn2){43 }44
45 public doubleParseDouble(){46 }47
48 publicnumber sub(number n2){49 }50
51 publicnumber mul(number n2){52 }53
54 publicnumber div(number n2) {55 }56
57 }

number.java

java 辅助类作用 java写辅助_Math_07

java 辅助类作用 java写辅助_java编写一个小学辅助软件_08

1 packagecalc;2
3 /*支持分数和随机长度,并可以将每次答题情况记录到文件里*/
4
5 importjava.io.FileNotFoundException;6 importjava.io.FileOutputStream;7 importjava.io.PrintStream;8 importjava.util.Date;9 importjava.util.Scanner;10
11 public classQuestion {12
13 public static String str = "";//题目
14 public static int num = 4;//每题中数的个数
15 public static int num_i = 0;//题目中已有数的个数
16 public static int numberRange = 20;//运算中数的最大取值
17 public static number sum = new number();//结果
18
19 public static voidmain(String[] args) {20
21 System.out.println();22 System.out.println("Please finish the following 25 questions!");23 System.out.println("Note: don't seperate your answer with space, ");24 System.out.println("or you will be considered wrong!");25 System.out.println();26
27 Scanner input=newScanner(System.in);28
29 String file="out.txt";30
31 int right=0;32 PrintStream out = null;33
34
35 if(args.length>=1)36 file=args[0];37
38 try{39 out=new PrintStream(newFileOutputStream(file));40 } catch(FileNotFoundException e1) {41 //TODO Auto-generated catch block
42 e1.printStackTrace();43 input.close();44 return;45 }46
47 out.println("\n\n"+new Date()+"\n\n");48
49 for (int i = 0; i < 25; i++) {50
51 GetQuestion();52 System.out.print(i+1);53 System.out.print(". " + str +"\nYour answer: ");54 String answer="";55 try{56 answer=input.nextLine();57 }catch(Exception e){58 }59 System.out.print("true answer: "+sum.toString()+" ");60 number re=sum.add(new number(10));61 try{62 re=newnumber(answer);63 if(re.equals(sum))64 {65 System.out.println("You are right!");66 right=right+1;67 }else{68 System.out.println("You are wrong!");69 }70 }catch(Exception e){71 if(answer.indexOf('.')!=-1)72 {73 try{74 double ant=Double.parseDouble(answer);75 if(Math.abs(ant-sum.ParseDouble())<1e-5)76 {77 System.out.println("You are right!");78 right=right+1;79 }else{80 System.out.println("You are wrong!");81 }82 }catch(Exception ex){83 System.out.println("You are wrong!");84 }85 }else{86 System.out.println("You are wrong!");87 }88 }89 out.print(i+1);90 out.println(". " +str );91 out.println("Your answer: "+answer);92 out.println("True answer: "+sum.toString());93 }94 System.out.println(right+" / 25, So your accuracy is "+right/25.0);95 out.println(right+" / 25, So your accuracy is "+right/25.0);96 out.println();97 input.close();98 out.close();99 System.out.println();100 }101
102 private static voidGetQuestion() {103
104 str = "";105 sum.set(0);;106 num_i = (int) (Math.random()*3)+3;107 quesGrow();108 }109
110 private static voidquesGrow() {111 if( num_i > 1) {112 int j =num_i;113 num_i--;114 quesGrow();115
116 int ck=(int)(Math.random()*4);117 number w;118 if(ck!=0)119 w=new number(1+(int)(Math.random()*numberRange));120 else w=new number(1+(int)(Math.random()*numberRange),1+(int)(Math.random()*numberRange));121 int t=(int)(Math.random()*2);122 int f=(int)(Math.random()*4);123
124 if(t == 0)125 {126 if( f == 0) {127 sum =sum.add(w);128 str = str + "+" +w.toString();129 }130 if( f == 1) {131 sum =sum.sub(w);132 str = str + "-" +w.toString();133 }134 if( f == 2) {135 if( j < 3) {136 sum =sum.mul(w);137 str = str + "*" +w.toString();138 }139 else{140 sum =sum.mul(w);141 str = "(" +str+ ")" + "*" +w.toString();142 }143 }144 if ( f == 3) {145
146 if( j < 3) {147 sum =sum.div(w);148 str = str + " / " +w.toString();149 }150 else{151 sum =sum.div(w);152 str = "(" +str+ ")" + " / " +w.toString();153 }154 }155 }156 else
157 {158 if( f == 0) {159 sum =sum.add(w);160 str = w.toString() + "+" +str;161 }162 if( f == 1) {163 if( j < 3) {164 sum =w.sub(sum);165 str = w.toString() + "-" +str;166 }167 else{168 sum =w.sub(sum);169 str = w.toString() + "-" + "(" +str+ ")";170 }171 }172 if( f == 2) {173 if( j < 3) {174 sum =sum.mul(w);175 str = w.toString()+ "*" +str;176 }177 else{178 sum =sum.mul(w);179 str = w.toString() + "*" + "(" +str+ ")";180 }181 }182 if( f == 3) {183 if( j < 3) {184 sum =w.div(sum);185 str = w.toString() + " / " +str;186 }187 else{188 sum =w.div(sum);189 str = w.toString()+ " / " + "(" +str+ ")";190 }191 }192 }193 }194 else if( num_i == 1) {195 int ck=(int)(Math.random()*4);196 number w;197 if(ck!=0)198 w=new number(1+(int)(Math.random()*numberRange));199 else w=new number(1+(int)(Math.random()*numberRange),1+(int)(Math.random()*numberRange));200 sum =sum.add(w);201 str = str +w.toString();202 }203 }204 }
Question.java