中文编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
作业代码位置 https://github.com/irvingming11/Annotation.git
这个作业的目标 完成中文编程作业,然后将代码上传至github仓库,加入gitignore文件和开源license
作业正文 如下
其他参考文献 百度
代码行数
需求分析时间
编码时间

1.记录自己的代码行数,需求分析时间,编码时间。

   代码是用java编写的,创建了五个类,总代码行数388行,需求分析先粗略分析了,后期编码过程中对存在的问题又不断的进行改进和分析,编码时间比较零散,整得来算一天半

2.分解需求的思路,分解成多个模块,并阐述为什么这么分,优势在哪,可以附上代码片段。

   分解需求的思路是将需求分为五个模块:
      1.变量声明:
      2.变量运算
      3.看看变量
      4.条件判断
      5.输入错误
   选择这么划分是因为有四种固定的句型,然后输入错误模块是为了给用户提供交互,一旦输入错误会给用户提供错误信息,详细代码如下。
五个模块封装在run方法里面,分别对应着一个if else。程序还封装了四个类,Number,Arithmetic,Print,Variable。Number是处理数字的将中文数字和数学数字之间进行转换,Arithmetic是负责处理计算的,Print负责打印输出,Varible是对变量进行处理,包括三个参数varType,varName,varValue。因为希望程序后期不光可以支持整数类型,所以设置了varType。

public static void run(String input, int i, Scanner sc, ArrayList<Variable> list1) {
        Object chineseNumber;
        Variable var;
//                变量声明部分
        if (input.equals("整数")) {
//            获取变量名
            String var_name = sc.next();
//            判断变量是否已经声明
            var = findVar(var_name, input, list1);
//            获取对变量进行的操作
            String change = sc.next();
            if ("等于".equals(change)) {
                chineseNumber = sc.next();
                Number n = new Number();
//                将中文数字转换成英文
                int number = n.findNumber(chineseNumber);
                if (number >= 0 && number <= 10) {
                    var.setVarValue(number);
//                    将变量添加进list
                    list1.add(var);
                } else {
                    System.out.println("第" + i + "行变量赋值必须在0-10之间,请重新声明赋值");
                }
            } else {
                sc.next();
                System.out.println("第" + i + "行的变量声明有误,请重新声明赋值");
            }
        } else if (findVar(input, list1) != null) {
//                变量计算部分
            var = findVar(input, list1);
            String change = sc.next();
            String chinese_number = sc.next();
            Number n = new Number();
            int number = n.findNumber(chinese_number);
            Arithmetic arith = new Arithmetic(change);
//            判断对变量进行的计算
            arith.judgeOperator(number, var, i);
        } else if ("看看".equals(input)) {
//                看看变量部分
            String name = sc.next();
            var = findVar(name, list1);
            Print p = new Print(input, name);
//            打印变量
            p.print(var, p, i, list1);
        } else if ("如果".equals(input)) {
//                条件判断部分
            String sentence = sc.nextLine();
            String[] subString1 = sentence.split("否则");
            String[] subString2 = subString1[0].split("则");
            String[] name = subString2[0].split(" ");
            var = findVar(name[1], list1);
            if (var != null) {
                Arithmetic arith = new Arithmetic();
                arith.result(subString2[0], subString2[1], subString1[1], var, i, sc, list1);
            } else {
                System.out.println("第" + i + "行的" + name[1] + "变量未进行声明");
            }
        } else {
            System.out.println("第" + i + "行的" + input + "变量未进行声明");
        }

    }

3.记录不会的知识的学习过程以及修改优化的过程;可以附上资料网站。

   第一次程序完工,是按照样例一来进行编写的,当时是采用批处理的思想对每一条语句先存储在一个HashMap里然后每一个中文作为HashMap里面的Key,但是后来发现并不太可取,又将HashMap改成了List,将每天语句存储在List里面。后期在测试的时候,突然想到所有程序运行一条语句一条语句的运行,然后进行了一次大改之后就初步完成了现在的程序,但是现在的程序仍然存在不足的地方:
      1.因为作业时间原因,还没有对代码进行优化,程序可能存在进一步优化的问题,比如,没有进行一些类之间的继承关系等,后期花时间整改一下代码肯定会更简洁
      2.现在的程序不支持直接 “变量 等于 数字”这种赋值方式
      3.现在的程序存在隐患,如果用户输入的时候不小心多敲了一个空格,程序就无法读取成功,后期需要解决两次输入之间的多空格问题。
      4.如果……则……否则……这个固定句型中还不支持对两个变量之间的比较,只支持变量和数之间的比较。

运行结果如下:

运行结果一
样例结果

posted on 2020-02-08 12:51  ANNOMING  阅读(425)  评论(0编辑  收藏

导航