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

    运行结果如下:

    运行结果一
    样例结果

  • 相关阅读:
    ruby基础语法
    几种移动开发技术的比较和选型
    iOS中UIWebView与其中网页的javascript的交互
    android混合开发,webview的java与js互操作
    在学Go语言
    从11对战平台获取玩家数据进行分析
    本地json文件的编辑器,node-webkit开发的exe程序
    51单片机实现多模式计算器
    如何得到个性化banner
    php文件下载服务器代码
  • 原文地址:https://www.cnblogs.com/Annoming/p/12274957.html
Copyright © 2011-2022 走看看