zoukankan      html  css  js  c++  java
  • 中文编程作业

    这个作业属于哪个课程 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.如果……则……否则……这个固定句型中还不支持对两个变量之间的比较,只支持变量和数之间的比较。

    运行结果如下:

    运行结果一
    样例结果

  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/Annoming/p/12274957.html
Copyright © 2011-2022 走看看