我通过百度和实际问答的方式了解到,小学一年级数学有如下的几个特点:
特点1只有加减法
2只有正整数运算 3只有20内的正整数我通过百度和实际问答的方式了解到,小学二年级数学有如下的几个特点: 特点1比小学一年级多了乘除法
2会2位数相加减的运算了 3会运算100以内的数加减经过分析,我认为,这个程序应当: 可接接收2个参数:题目数量、年级 会检测出各种输入参数的错误 会根据传入的年级生成对应需求的题目 最后将题目答案输出到out.txt文件 各部分函数代码给注释,有明确的逻辑。 程序运行中、文件输出后要给明确的提示 经过分析,我认为,这个程序应当:
这个程序有一个类,3个函数,功能如下: 主函数里调用check()函数排除输入参数的各种问题 主函数里调用init()函数初始化题目和答案 主函数里调用OutPutFile()函数将题目和答案输出到out.txt文件中 check()类用来排除输入参数的各种问题,函数流程如下: 检测输入的参数的数量(只能为0、1、2这几种) 检测输入的是否为正整数 检测参数的大小是否符合需求 init()类用来生成题目和答案,函数流程如下: 生成2个可变字符串 生成2个随机数 在循环内将2个随机数用可变字符串拼接成题目和答案,并且保存答案 OutPutFile()函数将题目和答案输出到out.txt文件 函数流程图: 算法的关键: 判断输入的参数是否合法,对于不合法的各种情况需给予提示 生成的数字是否满足大纲要求时的判断逻辑
写出具体实现的步骤
准备工作:先在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'
记录编码调试的日志,请记录下开发过程中的 debug 历程
除法余数的判断 解决方案:都做余数判断,分为两类输出,有余数按模版输出,无余数省略余数输出。 参数(年级的选择) 解决方案:在整体前做判断。由于我先写的算法,后进行年级选择导致。
输入的参数为英文、特殊符号、参数个数不对、参数数值过大程序意外停止 解决:将判断参数各种错误的代码独立抽出来写成一个check()函数,并且在出现错误的地方增加提示和正确的结束程序,防止程序抛错误。
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}
请给出本次实验使用的代码规范:
第一条代码中的命名均不以下划线或美元符号开始,也不一下划线或美元符号结束。 第二条代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 第三条类名使用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