首页 > 代码库 > 自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)

自动生成数学题型三 (框架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 判断答案正确页面(判断代码在之后)

技术分享

自动生成数学题型三 (框架Struts2)题型如 a+b=c(a、b、c都为分数)