zoukankan      html  css  js  c++  java
  • 小学生双倍快乐

    可爱的小学一二年级计算题

    一、预估与实际

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 600 950
    • Estimate • 估计这个任务需要多少时间 600 950
    Development 开发 660 830
    • Analysis • 需求分析 (包括学习新技术) 60 100
    • Design Spec • 生成设计文档 20 30
    • Design Review • 设计复审 10 30
    • Coding Standard • 代码规范 (为目前的开发制定合适的规范) 10 10
    • Design • 具体设计 60 50
    • Coding • 具体编码 500 550
    • Code Review • 代码复审 30 20
    • Test • 测试(自我测试,修改代码,提交修改) 60 40
    Reporting 报告 70 80
    • Test Repor • 测试报告 30 35
    • Size Measurement • 计算工作量 20 15
    • Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 20 30
    合计 950

    二、需求分析

    我通过上网的方式了解到,小学一年级数学有如下的几个特点:

    • 特点1
      都是正整数,范围在0-100以内

    • 特点2
      会100以内加减乘除法

    • 特点3
      相减的差不为0
      经过分析,我认为,这个程序应当:

    • 使用的数字小于100

    • 不能使用负数

    • 除数不能为0

    三、设计

    1. 设计思路

    说明你如何设计这个程序

    比如:

    • 这个程序有x个类,x个函数,函数之间的调用关系是怎样的?
    • 关键函数的流程图是怎样的?
    • 算法的关键的关键是什么?
    • 运用随机数,查阅资料
    • FileOutputStream的write()方法来写入文件。
    • out.txt文本的建立和写入
    • 可以凭自己意愿循环生成想要的题目与答案

    2. 实现方案

    写出具体实现的步骤

    比如:

    • 准备工作:下载Git管理仓库,并在GitHub上fork亓老师主页的MathExam2018仓库,并clone到本地;
    • 技术关键点:关于文本创建的一系列方法,判断是一年级还是二年级,用两个StringBuffer分别表示题目与答案,用append方法连接起来

    四、编码

    查到math.random()是生成随机数的方法
    第二位随机数根据第一位的值限制范围,即可以不会发生差值为负的情况
    将字符串数组转换成byte,再用FileOutputStream的write()方法来写入文件。

    1. 调试日志

    • cmd输入文件的未换行,经过查询知道cmd换行符/r/n

    • 想要循环进程从头开始,问题在于没给再一次输入参数,所以参数一直保持不变,解决方法是加一个控制台输入。

    • 修改了输入“abcd”字符的结果

    2. 关键代码

    for(i=0;i<n[0];i++) {								
    			int a=(int)(Math.random()*10+1);									
    			int b=(int)(Math.random()*10+1);						// 保证除数不为0
    			int c=(int)(Math.random()*2);
    			if(c%2==0) {
    				System.out.println("("+(i+1)+")"+a+"x"+b+"=");				// 乘法运算
    				qs = new StringBuffer("("+(i+1)+")"+a+"x"+b+"=");
    				rs = new StringBuffer(" "+(a*b));
    				as[i]=("("+(i+1)+")"+a+"x"+b+"=");
    				qs.append(rs);
    				cs[i]=qs.toString();
    				}
    	for(;;) {
            int flag=4;
    		int[] n =new int [args.length] ;
    		n[0]=Integer.parseInt(args[0]);
    		n[1]=Integer.parseInt(args[1]);
    	    	if(args[0].length()>5 && Integer.parseInt(args[0])>100) {
    	    		System.out.print(" 输入的题目数太大");					// 限制题数过大
    				flag=0;
    				}												  
    			if(Integer.parseInt(args[1])>2) {
    				System.out.print(" 输入的年级数太大");					// 限制年级数过大													 
    				flag=1;
    				}									  
    	    	if(n[0]<=0 && !args[0].matches("\d*")) {
    	    		System.out.print(" 输入的题目数不对,应为正整数");			// 限制题数为正整数
    	    		flag=2;
    	    		}
    	    	if(n[1]<=0 && !args[1].matches("\d*")) {
    	    		System.out.print(" 输入的年级数不对,应为正整数");			// 限制年级数为正整数
    	    		flag=3;
    	    		}
    	    	if(flag!=4) {
    	    		System.out.println("
    "+"请输入题目数与年级");	args[0]=sc.next();args[1]=sc.next();continue;
    	    		}// 如果输入的两个参数不对 则继续输入 直至正确为止
    
    • 控制输入参数的规范

    • 3. 代码规范

    • 第一条:注释的双斜线与注释内容之间有且仅有一个空格

    • 第二条:左小括号和字符之间不出现空格;同样的,右小括号和字符之间也不出现空格

    • 第三条:避免类似的名字,或者仅仅是大小写不同的名字

    • 第四条:左大括号后换行

    • 第五条:注释的双斜线与注释内容之间有且仅有一个空格

    五、测试

    • 输入 10 0 输出:输入的年级数不对,应为正整数
      请输入题目数与年级
    • 输入 -10 1 输出:输入的题目数不对,应为正整数
      请输入题目数与年级
    • 输入10 -1 输出:输入的年级数不对,应为正整数
      请输入题目数与年级
    • 输入10 3 输出:输入的年级数太大
      请输入题目数与年级
    • 输入-10 -1 输出:输入的年级数太大输入的题目数不对,应为正整数 输入的年级数不对,应为正整数
      请输入题目数与年级
    • 输入10 1输出正常
    • 输入10 2输出正常

    六、总结

    • 敲代码前总觉得挺容易的,直到打完之后才发现有许许多多的问题。这种情况我觉得应该从一开始就规范好自己的代码,以便后续的寻找和修改,这对于自己与别人都好。刚开始写的时候真的是举步维艰,一个一个方法的查,一个一个人的问,写到能实现基础运算功能后又发现许许多多的错误,我才意识到思路有了之后一定要好好规划,不然写完了还要花大量的时间补代码。
  • 相关阅读:
    python3从尾到头打印链表
    替换空格
    二维数组中的查找
    堪比福尔摩斯的破案新科技!快来了解一下
    好莱坞首部全亚裔主演电影上映,华人终于谈恋爱了
    《呼啸山庄》:爱之深,恨之切,死相依
    《碟中谍 6:全面瓦解》口碑爆棚,登顶北美周末票房
    让重刑犯做瑜伽:新西兰人性化监狱的故事
    python面试笔试题汇总
    centos7 重置root 密码
  • 原文地址:https://www.cnblogs.com/linzenghan/p/9629422.html
Copyright © 2011-2022 走看看