计算开脑题

mac2022-06-30  33

自己取一个大气又可爱的标题

一、预估与实际

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划500730• Estimate• 估计这个任务需要多少时间950920Development开发30• Analysis• 需求分析 (包括学习新技术)1013• Design Spec• 生成设计文档2016• Design Review• 设计复审2043• Coding Standard• 代码规范 (为目前的开发制定合适的规范)2026• Design• 具体设计2036• Coding• 具体编码500630• Code Review• 代码复审2016• Test• 测试(自我测试,修改代码,提交修改)260330Reporting报告2042• Test Repor• 测试报告2032• Size Measurement• 计算工作量2012• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划2630合计

二、需求分析

我通过百度和实际问答的方式了解到,小学一年级数学有如下的几个特点:

特点1只有加减法

2只有正整数运算 3只有20内的正整数

我通过百度和实际问答的方式了解到,小学二年级数学有如下的几个特点: 特点1比小学一年级多了乘除法

2会2位数相加减的运算了 3会运算100以内的数加减

经过分析,我认为,这个程序应当: 可接接收2个参数:题目数量、年级 会检测出各种输入参数的错误 会根据传入的年级生成对应需求的题目 最后将题目答案输出到out.txt文件 各部分函数代码给注释,有明确的逻辑。 程序运行中、文件输出后要给明确的提示 经过分析,我认为,这个程序应当:

三、设计

1. 设计思路

这个程序有一个类,3个函数,功能如下: 主函数里调用check()函数排除输入参数的各种问题 主函数里调用init()函数初始化题目和答案 主函数里调用OutPutFile()函数将题目和答案输出到out.txt文件中 check()类用来排除输入参数的各种问题,函数流程如下: 检测输入的参数的数量(只能为0、1、2这几种) 检测输入的是否为正整数 检测参数的大小是否符合需求 init()类用来生成题目和答案,函数流程如下: 生成2个可变字符串 生成2个随机数 在循环内将2个随机数用可变字符串拼接成题目和答案,并且保存答案 OutPutFile()函数将题目和答案输出到out.txt文件 函数流程图: 算法的关键: 判断输入的参数是否合法,对于不合法的各种情况需给予提示 生成的数字是否满足大纲要求时的判断逻辑

2. 实现方案

写出具体实现的步骤

准备工作:先在Github上创建仓库,克隆到本地 设计大纲:设置算法分类、多次判断、分类输出 技术关键:年级的选择、分类输出

四、编码

编码过程: main函数: 创建一个可变字符串str用于拼接题目 创建check()函数专门用于检测输入参数的各种错误 将str和main函数的参数传入init()初始化函数中 创建OutPutFile()用于题目和答案输出到out.txt文件 init()函数: 创建1个可变字符串str1用于拼接答案 创建1个for循环 循环内生成2个随机数 用str拼接题目 用条件判断语句判断当前的运算符并算出答案 str1拼接答案 str1拼接到str尾部

遇到的问题: 如何使用cmd接收的参数 查阅别人的博客发现,用cmd输入的参数的使用方法和字符串数组的使用方法一致。

加减法怎么才能保证是随机的 原先我是用问号表达式来控制加减后面发现这种发放并不适用于2年级的加减乘除的情况。思考了一会儿,我将加减乘除法存入字符串数组当中,然后用随机数随机数组的下标就实现了,1年级随机数范围[0-1],2年级随机数范围[0-3]。

怎么才能实现题目和答案分离输出 原先我打算用字符串来完成,但是后面突然想到,如果要进行大批的字符串拼接可变字符串的拼接效率是最高的,所有我改变使用可变字符串Stringbuffer来进行拼接,我用2个可变字符串分开拼接题目和答案,最后再把题目和答案拼接到一起就解决了这个问题。

如何实现年级判断 我在年级判断的时候卡壳了一会儿,主要是因为1个参数应该默认为1年级,2个参数也可能是1年级也可能是二年级。经过一番思考我加了参数长度的判断就解决了问题。 我在字符串拼接的时候有换行out.txt 文件里面的题目全部显示在一行 百度查阅资料发现记事本里面的换行是'\r\n'

1. 调试日志

记录编码调试的日志,请记录下开发过程中的 debug 历程

除法余数的判断 解决方案:都做余数判断,分为两类输出,有余数按模版输出,无余数省略余数输出。 参数(年级的选择) 解决方案:在整体前做判断。由于我先写的算法,后进行年级选择导致。

输入的参数为英文、特殊符号、参数个数不对、参数数值过大程序意外停止 解决:将判断参数各种错误的代码独立抽出来写成一个check()函数,并且在出现错误的地方增加提示和正确的结束程序,防止程序抛错误。

2. 关键代码

package com.java.Task01;

import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner;

/**

@author 郏敏杰这是命令行工具MathExam,自动生成一份小学一年级的数学加减计算题。 */

public class Math1Exam6317 { public static void main(String[] args) throws IOException {

//定义答案 int answer; //确定输出的文件 File file = new File("out.txt"); //创建指向文件的数据输出流 DataOutputStream out = new DataOutputStream(new FileOutputStream(file)); @SuppressWarnings("resource") Scanner input = new Scanner(System.in); System.out.println("小学一年级数学加减计算题"); System.out.println("请输入题目数量:"); //获取控制台输入题目数量n int n = input.nextInt(); //生成题目 for (int i = 1; i <= n; i++) { //生成两个随机数 int num1 = (int)(Math.random()*100+1); int num2 = (int)(Math.random()*100+1); //生成题序和题目 if(num1 > num2) { //生成减法 System.out.println("("+ i +") " + num1 +" - "+ num2 + " ="); String str = ("("+ i +") " + num1 +" - "+ num2 + " = " + (num1-num2)); //写入数据 out.writeUTF(str);

// System.out.println(str); } else { //生成加法 System.out.println("("+ i +") " + num1 +" + "+ num2 + " ="); String str = ("("+ i +") " + num1 +" + "+ num2 + " = " + (num1+num2)); //写入数据 out.writeUTF(str); // System.out.println(str); } } out.close();

System.out.println("------------------标准答案------------------"); //创建指向文件的数据输入流 DataInputStream in = new DataInputStream(new FileInputStream(file)); //读数据 for (int i = 0; i < n; i++) { System.out.println(in.readUTF()); } in.close(); }//main

}

3. 代码规范

请给出本次实验使用的代码规范:

第一条代码中的命名均不以下划线或美元符号开始,也不一下划线或美元符号结束。 第二条代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 第三条类名使用UpperCamelCase风格,但是以下情形例外:DO / DTO / VO / AO / PO 等。 第四条方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵循驼峰形式。 第五条变量和常量的命名方式:非公有(private/protected/default)变量前面要加上小写m; 第六条类型与中括号紧挨相连来定义数组。正例:定义整形数组 int[] arrayDemo;并人工检查代码是否符合规范 第七条杜绝完全不规范的缩写,避免忘文不知义。反例:AbstractClass“缩写”命名成AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。 第八条为了达到代码自己自解释的目标,任何自定义编程元素在命名时,使用精良完整的单词组合来表达其意。但是有些名称实在过于长,这个可以适当的缩写,不要忘文不知义就可以。这个不是客观的规定。 第九条不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。 第十条大括号的使用约定。如果是大括号内为空,则简介地写成{}即可,不需要换行;如果是非空代码块则: 左大括号前不换行。 左大括号后换行。 右大括号前换行。 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。

五、测试

请思考并记录你认为必要的测试点,并记录测试用例与测试结果测试编号 测试编号 具体输入 预期结果 实际结果 1 0 格式错误!请重新输入...... 符合预期 2 10 正常执行,生成10道一年级加减运算题 符合预期 3 10 1 正常执行,生成10道一年级加减运算题 符合预期 4 10 2 正常执行,生成10道二年级乘除运算题 符合预期 5 10 3 格式错误!请重新输入...... 符合预期 6 1000 格式错误!请重新输入...... 符合预期

六、总结

请总结过程中的教训和经验,思考

1 程序不仅仅只是编码,在开始编码前应该还有很多工作要做,要分析需求,设计好文档,才能在完成的时候符合要求 编码前要先构思,有一个大致的方向 2基础知识很重要。在敲代码的时候有时候会发现自己知道要怎么做,但是就是因为不清楚基础知识而花费更多时间

转载于:https://www.cnblogs.com/jmj1/p/9631740.html

最新回复(0)