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

  • 相关阅读:
    PHP程序员应当如何保持与时俱进?
    使用validator-api来验证spring-boot的参数
    运维不仅仅是懂Linux就行,还需要知道这些……
    Let's Encrypt: 为CentOS/RHEL 7下的nginx安装https支持-具体案例
    少年,是时候换种更优雅的方式部署你的php代码了
    为什么大多数培训机构还停留在只教ssh框架?
    设置spring-boot的logging
    ElasticSearch 429 Too Many Requests circuit_breaking_exception
    LINUX下永久添加静态路由
    Kafka集群管理和监控方案之Kafka Manager
  • 原文地址:https://www.cnblogs.com/orchid9/p/6685646.html
Copyright © 2020-2023  润新知