自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)
1. 约分分数
1.1 保留质数
1 /** 2 * 将数值放入到fraction数组中 3 * @param fen 简要放的 int类型数值 4 */ 5 public void fenshu(int fen) { 6 fraction[i++] = fen; 7 }
1.2 定义int类型数组
1 /** 2 * 获得int 类型的数组,fraction对象 3 */ 4 public void getFraction() { 5 fraction = new int[nums]; 6 }
1.3 获取质数数量
1 /** 2 * 获取num有多少个质数相乘的质数的数目,质数可相同 3 * @param num 任意的int类型的数值 4 */ 5 public void primeNumber(int num) { 6 if (num == 1) { 7 nums++; 8 System.out.println("num为 " + num); 9 } else { 10 // 注意:因为老师不会出0/2的数,所以没写if(numa>0)如果给num 为0这里会出现死循环 11 if (num % a == 0) { 12 nums++; 13 int d = num / a; 14 primeNumber(d); 15 } else { 16 if (num % b == 0) { 17 nums++; 18 int d = num / b; 19 primeNumber(d); 20 } else { 21 b = b + 2; 22 primeNumber(num); 23 } 24 } 25 } 26 }
1.4 将数值分解成质数(质数可以相同)
1 /** 2 * 将值分解成最小质数和集 3 * @param num 将要分解的 int类型的数值 4 */ 5 public void prime(int num) { 6 if (num == 1) { 7 System.out.println("num为 " + num); 8 } else { 9 // 注意:因为老师不会出0/2的数,所以没写if(numa>0)如果给num 为0这里会出现死循环 10 if (num % a == 0) { 11 fenshu(a); 12 int d = num / a; 13 System.out.println("a为 " + a); 14 System.out.println("num为 " + d); 15 prime(d); 16 } else { 17 if (num % c == 0) { 18 fenshu(c); 19 int d = num / c; 20 System.out.println("c为 " + c); 21 System.out.println("num为 " + d); 22 prime(d); 23 } else { 24 c = c + 2; 25 System.out.println("c更改为 " + c); 26 System.out.println("num不变依旧为 " + num); 27 prime(num); 28 } 29 } 30 } 31 }
1.5 将分母和分子进行约分成最简质数
1 /** 2 * 将两个数组进行比较,如数组内有相同的数据,将其转换为1 3 * @param a 传递的第一个数组a 4 * @param b 传递的第二个数组b 5 */ 6 public static void compareTwo(int[] a, int[] b) { 7 int alength = a.length; 8 int blength = b.length; 9 if (alength >= blength) { 10 for (int k = 0; k < blength; k++) { 11 for (int m = 0; m < alength; m++) { 12 if (a[m] == b[k]) { 13 a[m] = 1; 14 b[k] = 1; 15 break; 16 } 17 } 18 } 19 } else { 20 for (int k = 0; k < alength; k++) { 21 for (int m = 0; m < blength; m++) { 22 if (a[k] == b[m]) { 23 a[k] = 1; 24 b[m] = 1; 25 break; 26 } 27 } 28 } 29 } 30 }
1.6 将分子和分母的质数分别相乘得到最简分子和分母
1 /** 2 *将数组内的所有元素进行相乘 3 * @param a 数组a 4 * @return 5 */ 6 public static int product(int[] a){ 7 int product=1; 8 for(int s=0;s<a.length-1;s++){ 9 product=product*a[s]; 10 a[s]=product; 11 } 12 return product; 13 }
1.7 根据用户的条件生成分子分母
1 /** 2 * 获取随机生成一个包含分子和分母,且分子分母都为质数的数组。 3 * @param num1 分子最小值 4 * @param num2 分子最大值 5 * @param num3 分母最小值 6 * @param num4 分母最大值 7 * @return 返回一个包含分子和分母的数组 8 */ 9 public static int[] fractions(int num1,int num2,int num3,int num4){ 10 int[] fenshu=new int[2]; 11 int first = generate(num1, num2); 12 int secound = generate(num3, num4); 13 count3Bean cBean=new count3Bean(); 14 cBean.primeNumber(first); 15 cBean.getFraction(); 16 cBean.prime(first); 17 int[] a=cBean.fraction; 18 count3Bean cBean2=new count3Bean(); 19 cBean2.primeNumber(secound); 20 cBean2.getFraction(); 21 cBean2.prime(secound); 22 int[] b=cBean2.fraction; 23 compareTwo(a, b); 24 int fenzi=product(a); 25 int fenmu=product(b); 26 fenshu[0]=fenzi; 27 fenshu[1]=fenmu; 28 return fenshu; 29 }
1.8 将分子分母进行约分
1 /** 2 * 将分数处理为不能再约分的数 3 * @param num1 分子 4 * @param num2 分母 5 * @return int类型的数组包含分子和分母 6 */ 7 8 public static int[] fractions2(int num1,int num2){ 9 int[] fenshu=new int[2]; 10 count3Bean cBean=new count3Bean(); 11 cBean.primeNumber(num1); 12 cBean.getFraction(); 13 cBean.prime(num1); 14 int[] a=cBean.fraction; 15 count3Bean cBean2=new count3Bean(); 16 cBean2.primeNumber(num2); 17 cBean2.getFraction(); 18 cBean2.prime(num2); 19 int[] b=cBean2.fraction; 20 compareTwo(a, b); 21 int fenzi=product(a); 22 int fenmu=product(b); 23 fenshu[0]=fenzi; 24 fenshu[1]=fenmu; 25 return fenshu; 26 }
2. action 类
1 public class fenshu { 2 3 private String fenzixiao; 4 private String fenzida; 5 private String fenmuxiao; 6 private String fenmuda; 7 private String number; 8 ....... 9 //此处省略get和set方法 10 public String execute(){ 11 ActionContext actioncontext = ActionContext.getContext(); 12 Map<String, Object> session = actioncontext.getSession(); 13 List<Four> fours=count3.getFourList(Integer.parseInt(number), Integer.parseInt(fenzixiao), Integer.parseInt(fenzida), Integer.parseInt(fenmuxiao), Integer.parseInt(fenmuda)); 14 session.put("fours", fours); 15 return "fenshusuccess"; 16 } 17 18 }
3. 运行结果图
3.1 初始界面
3.2 用户填数据
3.3 生成题目界面(如在a/b+c/d=e中a/b和c/d都为分数)
3.4 用户填写答案
3.5 判断答案正确页面(判断代码在之后)
作者:张九星
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。