四则运算生成器做法思路

  1. 定义一个四则运算符的字符数组,使用随机数方法每次产生1到3的随机数作为运算符个数,运算符的个数确定后操作数随之确定
  2. 用随机数方法Math.rabdom()产生确定范围内的随机数存入数组
  3. 同样使用随机数去取运算符,存放到一个数组里面
  4. 将操作数和运算符转成字符串存放到字符串数组,再将字符串数组转化成字符串,使用io流写入到文件中
  5. public static float opt(String s) throws Exception {
            if (s == null || "".equals(s.trim())) {
                return 0f;
            }
            int a1 = s.indexOf("+");
            int a2 = s.indexOf("-");
            int a3 = s.indexOf("*");
            int a4 = s.indexOf("/");
            int a5 = s.indexOf("(");
            if (a1 == -1 && a2 == -1 && a3 == -1 && a4 == -1) {
                if (s.trim() == null || "".equals(s.trim())) {
                    throw new Exception("operate error");
                }
                return Float.parseFloat(s.trim());
            }
    
            if (a5 != -1) {
                int a6 = s.indexOf(")");
                if (a6 == -1) {
                    throw new Exception("括号不匹配");
                } else {
                    float f = opt(s.substring(a5 + 1, a6).trim());
                    s = s.replace(s.substring(a5, a6 + 1), String.valueOf(f));
                    return opt(s);
                }
            }
    
            if (a1 != -1) {
                return opt(s.substring(0, a1))
                        + opt(s.substring(a1 + 1, s.length()));
            }
            if (a2 != -1) {
                return opt(s.substring(0, a2))
                        - opt(s.substring(a2 + 1, s.length()));
            }
            if (a3 != -1) {
                return opt(s.substring(0, a3))
                        * opt(s.substring(a3 + 1, s.length()));
            }
            if (a4 != -1) {
                return opt(s.substring(0, a4))
                        / opt(s.substring(a4 + 1, s.length()));
            }
            return Integer.parseInt(s.trim());
        }

    使用以上的opt方法计算结果,该方法存在一些问题,比如计算结果没办法保留分数形式

  6. 目前只实现以上的功能
posted @ 2017-09-17 15:55  qiu_zhi  阅读(419)  评论(3编辑  收藏  举报