zoukankan      html  css  js  c++  java
  • 四则运算程序

            这个项目我是用jsp+servlet实现的web端程序,我主要实现了多个运算符的多项式生成、以及选择生成的类型是加减法、乘除法或者是混合运算,支持括号、支持判断对错以及计分。程序的核心内容就是随机生成一个运算式,并且还要将算式的答案计算出来,因为是多个运算符,所以存在运算优先级的情况。

            关于随机生成运算式的方法中,主要通过随机数和循环的结合来实现生成的项数,而各个运算符也是通过随机的方式生成,在涉及除法时为了避免除数为0,所以增加了一个判定条件。

     1 public Vector<String> randomQuestion() {
     2         Vector<String> group = new Vector<String>();
     3         Random random = new Random();
     4 
     5         int symbleNum = random.nextInt(3) + 1;// 生成式子项数
     6 
     7         double num1 = random.nextInt(10) + 1;// 第一项
     8 
     9         StringBuffer str = new StringBuffer();// 每个式子的String形式
    10 
    11         Vector<Object> shizi = new Vector<Object>();// 将式子存放进向量用以计算
    12 
    13         shizi.add(num1);
    14         str.append((int) num1);
    15         /*
    16          * 随机生成算式
    17          */
    18         while (symbleNum > 0) {
    19             double num2;
    20             int symble;
    21             num2 = random.nextInt(10) + 1;
    22             symble = random.nextInt(5);
    23 
    24             if (symble == 0) {
    25                 str.append(new String("+" + (int) num2));
    26                 shizi.add("+");
    27                 shizi.add(num2);
    28             } else if (symble == 1) {
    29                 str.append(new String("-" + (int) num2));
    30                 shizi.add("-");
    31                 shizi.add(num2);
    32             } else if (symble == 2) {
    33                 str.append(new String("x" + (int) num2));
    34                 shizi.add("*");
    35                 shizi.add(num2);
    36             } else if (symble == 3 && num2 != 0) {
    37 
    38                 if (((num2 % 2 == 0) || (num2 % 5 == 0)) && (num2 % 3 != 0)) {
    39                     str.append(new String("÷" + (int) num2));
    40                     shizi.add("/");
    41                     shizi.add(num2);
    42                 } else
    43                     symbleNum++;
    44             } else if (symbleNum > 1) {
    45                 int k1 = random.nextInt(10) + 1;
    46                 int k2 = random.nextInt(10) + 1;
    47                 int f = random.nextInt(2);
    48                 if (f == 1) {
    49                     str.append(new String("+" + (int)num2 + "x(" + k1 + "+" + k2
    50                             + ")"));
    51 
    52                     shizi.add("+");
    53                     double rs = k1 + k2;
    54                     rs = rs * num2;
    55                     shizi.add(rs);
    56                 } else {
    57                     str.append(new String("+" + (int)num2 + "x(" + k1 + "-" + k2
    58                             + ")"));
    59                     shizi.add("+");
    60                     double rs = k1 - k2;
    61                     rs = rs * num2;
    62                     shizi.add(rs);
    63                 }
    64                 symbleNum -= 2;
    65 
    66             } else {
    67                 str.append(new String("+" + (int) num2));
    68                 shizi.add("+");
    69                 shizi.add(num2);
    70             }
    71             symbleNum--;
    72         }
    73 
    74         double result = calculate(shizi);
    75         group.add(new String(str));
    76         group.add(new String("" + result));
    77         System.out.println(str);
    78         return group;
    79 
    80     }

    对于多项式的运算,我首先在生成多项式的时候就将生成的式子的每一项以及运算符通过向量存放,然后将向量传递到处理结果的方法中,遍历向量,将向量中的乘除法先处理,形成一个新的只含加减法的算式,然后依次计算,最后求出结果

     1 public double calculate(Vector<Object> shizi) {
     2         double result = 0;
     3         /*
     4          * 消除式子中的乘除法
     5          */
     6         for (int i = 0; i < shizi.size(); i++) {
     7             if (shizi.get(i) == "*" || shizi.get(i) == "/") {
     8                 double num1, num2;
     9 
    10                 num1 = (double) shizi.get(i - 1);
    11                 num2 = (double) shizi.get(i + 1);
    12                 if (shizi.get(i) == "*")
    13                     result = num1 * num2;
    14                 else if (shizi.get(i) == "/")
    15                     result = num1 / num2;
    16                 /*
    17                  * 将乘除法两端的数值计算后用以置换原式中的算式
    18                  */
    19                 shizi.set(i - 1, result);
    20                 shizi.remove(i + 1);
    21                 shizi.remove(i);
    22                 i--;
    23             }
    24         }
    25         /*
    26          * 依次将式子中的项计算
    27          */
    28         for (int i = 0; i < shizi.size(); i++) {
    29             if (shizi.get(i) == "+" || shizi.get(i) == "-") {
    30                 double num1, num2;
    31                 num1 = (double) shizi.get(i - 1);
    32                 num2 = (double) shizi.get(i + 1);
    33                 if (shizi.get(i) == "+")
    34                     result = num1 + num2;
    35                 else if (shizi.get(i) == "-")
    36                     result = num1 - num2;
    37                 /*
    38                  * 同上
    39                  */
    40                 shizi.set(i - 1, result);
    41                 shizi.remove(i + 1);
    42                 shizi.remove(i);
    43                 i--;
    44             }
    45         }
    46 
    47         return result;
    48 
    49     }

     项目gethub地址:https://github.com/1850252892/ChildEducation.git

  • 相关阅读:
    elasticsearch 索引清理脚本及常用命令
    git 快速入门及常见用法
    第01章-成本,你真的算对过吗?
    windows mysql安装及常用命令
    centos7 systemctl配置开机自启动服务
    python pip手动安装二进制包
    centos7使用nginx+uwsgi部署python django项目
    python json.loads()、json.dumps()和json.dump()、json.load()区别
    比阿里云快2倍的InfluxDB集群,我们开源了
    为什么是InfluxDB | 写在《InfluxDB原理和实战》出版之际
  • 原文地址:https://www.cnblogs.com/yyxxn/p/7559845.html
Copyright © 2011-2022 走看看