用JAVA实现小学四则运算
GitHub地址:
https://github.com/Sophur/four_arithmetic_operation
软件需求分析:
- 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
- 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
- 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
- 当程序接收的参数为4时,以下为输出文件示例。
功能设计:
输入数字n,随机生成n个包含至少两个运算符的式子以及相应的结果并输出到指定文件。
设计实现:
设计思路: 本次设计包含一个类Demo,共分为四个模块,分别为随机生成中缀表达式;将生成的中缀表达式转换为后缀表达式;计算后缀表达式的值;将第一个模块中生成中缀表达式以及第三个模块中计算出的相应的值输出到txt文件。
测试运行:
- 控制台输出:
- 文件输出:
- 命令行输出:
核心代码:
计算后缀表达式的值:
从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
本次设计我先把中缀表达式转换为后缀表达式,再对后缀表达式求值。
//计算后缀表达式public static int evaluateExpression(String expression) {Stack<Integer> operandStack = new Stack<Integer>();// 存放操作数的栈Stack<Character> operatorStack = new Stack<Character>();// 存放运算符的栈// 分割算术表达式ArrayList<String> result = new ArrayList<String>();String num = "";for (int i = 0; i < expression.length(); i++) {if (Character.isDigit(expression.charAt(i))) {num = num + expression.charAt(i);} else {result.add(num);result.add(expression.charAt(i) + "");num = "";}}result.add(num);// 测试分割后的算术表达式 // for(String str:result){ // System.out.print(str+" "); // }// 后缀表达式for (int i = 0; i < result.size(); i++) {if (result.get(i).equals("+") || result.get(i).equals("-")) {// 如果字符串为"+"或者"-",则执行栈中已存数据的加减乘除计算while (!operatorStack.isEmpty() && (operatorStack.peek() == '+' || operatorStack.peek() == '-'|| operatorStack.peek() == '*' || operatorStack.peek() == '/')) {processOneOperator(operandStack, operatorStack);}operatorStack.push(result.get(i).charAt(0));// 将操作符压入操作符栈中} else if (result.get(i).equals("*") || result.get(i).equals("/")) {// 如果字符串为"*"或者"/",则执行栈中已存数据的乘除计算while (!operatorStack.isEmpty() && (operatorStack.peek() == '*' || operatorStack.peek() == '/')) {processOneOperator(operandStack, operatorStack);}operatorStack.push(result.get(i).charAt(0));} else if (result.get(i).equals("(")) {// 如果遇到左括号,则将左括号压入操作符栈中operatorStack.push('(');} else if (result.get(i).equals(")")) {// 如果遇到右括号,则计算栈中的数据,直到遇到左括号为止while (operatorStack.peek() != '(') {processOneOperator(operandStack, operatorStack);}operatorStack.pop();// 将进行过计算的左括号弹出} else {// 如果遇到的是操作数,则将操作数直接压入操作数栈中 operandStack.push(Integer.parseInt(result.get(i)));}}// 对栈中数据进行计算,知道栈为空为止while (!operatorStack.isEmpty()) {processOneOperator(operandStack, operatorStack);}// 此时操作数栈中的栈顶元素也就是计算结果return operandStack.pop();
总结:
在看到项目的题目时觉得应该能轻松做出来,毕竟在学习C语言时学过有相关的例子,可以如法炮制。但是真正开始动手做时很艰难,原因有两点:其一,很长时间不使用java语言,基本的语法知识都已模糊,程序的开头定义一个ArrayList数组时都已忘记数组的基本格式,百度后重新学习后再去做已经花了很多时间,整个程序编码的过程基本伴随着不断的查询基本语法。其二:设计的功能过于简单,在后期完善阶段进行了很多次修改。通过这次项目的完成我真正意识到了在软件开发的过程中基础知识匮乏的致命性,几乎整个实现过程我都在处理低级的语法错误。
展示PSP:
PSP2.1 |
任务内容 |
计划完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
20 |
15 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
20 |
15 |
Development |
开发 |
600 |
500 |
·· Analysis |
需求分析 (包括学习新技术) |
60 |
60 |
· Design Spec |
· 生成设计文档 |
6 |
10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
4 |
6 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
5 |
5 |
· Design |
具体设计 |
10 |
12 |
· Coding |
具体编码 |
500 |
450 |
· Code Review |
· 代码复审 |
15 |
15 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
13 |
30 |
Reporting |
报告 |
15 |
20 |
·· Test Report |
· 测试报告 |
5 |
10 |
· Size Measurement |
计算工作量 |
10 |
13 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
3 |
3 |
转载于:https://www.cnblogs.com/hxyao/p/8604748.html
用JAVA实现小学四则运算相关推荐
- java实现加减乘除运算符随机生成十道题并判断对错_简单小程序——产生三十道小学四则运算题目...
题目要求程序可以生成三十道小学四则运算题目. 因为要随机生成题目,则需要产生随机数,因此我上网搜索了生成随机数的方法,选择了使用Random类得到规定范围内的随机数.因为一个运算需要三个元素,两个参与 ...
- 小学四则运算生成器(Java实现)
跳转详细介绍的博客:小学四则运算生成器(Java实现) 实现效果图: 开始运行程序 未输入生成题目数量及数值范围 输入数值 随机生成题目 用户输入并提交答案,后台将用户答案与正确答案进行校正,统计正确 ...
- 2016012090+小学四则运算练习软件项目报告
2016012090+小学四则运算练习软件项目报告 Coding.net原码仓库地址:https://git.coding.net/Ai_Code/Work.git 目录: 一.需求分析 二.功能设计 ...
- 全国小学四则运算1.0
程序:全国小学四则运算1.0 源代码: import javax.swing.*; import java.awt.*; import java.awt.event.*; //一开始的界面 publi ...
- 小学四则运算结对项目报告(GUI)
小学四则运算结对项目报告(GUI) 一.Coding.Net项目地址: https://git.coding.net/wsshr/Calculation.git 二.PSP表格(完成前): PSP 任 ...
- 201571030112/201571030108 小学四则运算练习软件软件需求说明
小学四则运算练习软件软件需求说明 1.引言 1.1 编写目的 本文档的目的是详细地介绍小学生四则运算练习系统所包含的需求,以便客户能够确认产品的确切需求以及开发人员能够根据需求设计编码,以下叙述将结 ...
- 201571030121《小学四则运算练习软件软件需求说明》结对项目报告
201571030107/201571030121<小学四则运算练习软件软件需求说明>结对项目报告 结对小伙伴:冯晓(201571030107) 任务一 首先,我们进行了实例体验,把我们已 ...
- 小学四则运算练习软件软件需求说明
小学四则运算练习软件软件需求说明 1.引言 1.1 编写目的 本文档的目的是详细地介绍小学生四则运算练习系统所包含的需求,以便客户能够确认产品的确切需求以及开发人员能够根据需求设计编码,以下叙述将结合 ...
- 【软件工程】小学四则运算 “软件”之初版
作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186 我的github远程仓库的地址: https://github ...
- 张天钰 内大计算机学院,20175305张天钰Java结对编程四则运算
Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...
最新文章
- Javascript高级调试——console.table()
- 学习旧岛小程序 (4) 电影组件的实现
- 搭建WordPress个人网站
- c语言中坐标xoy轴在哪里,用C语言在linux下获取鼠标指针的相对位置
- 多线程 进度条 C# .net
- 我的bolg,我的收获(MVC首次接触)
- va_start(),va_end()函数应用
- 【C】malloc动态分配内存和free释放
- 如何检查对象是否为数组?
- django模型_Django模型
- 简单算术表达式计算器
- Prototype.js 1.4中文使用手册PDF版下载
- WARNING: The directory '/home/zhex/.cache/pip/http' or its parent directory is not owned by the curr
- Directory traversal in Spring framework漏洞修复
- 单核CPU如何执行多线程
- 专升本第十二讲 (影音娱乐)
- htmlunit+quartz定时抓取博文并生成jsp页面
- 把AS代码链接到fla文件
- 标准日本语初级 语法整理
- 这个发现是否会是RSA算法的BUG、或者可能存在的破解方式?