20162302 - 20162319 结对编程项目-四则运算(第一周)
结对编程项目-四则运算(第一周)
-
需求分析
1、支持四则运算(加减乘除)算式的生成
2、支持对于所生成的题目给与答案解析
3、可以让用户作答并且判断答案是否正确
4、可以统计正确率
5、支持括号
6、支持真分式(本周未实现)
-
设计思路
首先要有一个部分负责算式的生成(四则运算类和算式生成类)
四则运算类:负责数字和符号的生成
import java.util.Random;
public class 四则运算 {
int 符号编码, 数字;
String 符号;
Random 符号随机 = new Random();
Random 数字随机 = new Random();
public 四则运算() {
}
public String 生成符号(){
符号编码 = 符号随机.nextInt(4);
符号解析(符号编码);
return 符号;
}
public int 生成数字(){
数字 = 数字随机.nextInt(100);
return 数字;
}
public void 符号解析(int a){
if (a==0)
符号 = "+";
else if(a==1)
符号 = "-";
else if (a==2)
符号 = "*";
else if (a==3)
符号 = "/";
}
public String toString(){
return 数字+符号;
}
}
算式生成器:是四则运算类的子类,负责调用父类的方法根据用户的需求以字符串的形式生成单个算式
import java.text.DecimalFormat;
public class 生成算式 extends 四则运算 {
int 阶数, 数字;
String 算式, 符号;
DecimalFormat fmt = new DecimalFormat("0");
public 生成算式 (int n){
阶数 = n;
生成(阶数);
}
public String 生成(int j){
数字 = 生成数字();
算式 = fmt.format(数字);
算式 = 算式.concat(" ");
for(int i=1; i<j; i++){
符号 = 生成符号();
算式 = 算式.concat(符号+" ");
数字 = 生成数字();
算式 = 算式.concat(fmt.format(数字)+" ");
}
return 算式;
}
public String toString(){
return 算式;
}
}
然后是运算式子的类,使其可以生成以便于判断答案(算式运算器类和格式转换器类)
算式运算器:使用到了栈的方法可以运算后缀表达式,在更新以后又可以作为格式转换器的子类进行一步转换并运算,使其也可以支持前缀表达式。
格式转换器:专门用于转换中缀式为后缀式的类。
代码篇幅过大
转换和运算都要用到栈
格式转换器
最后要有驱动器
驱动器:负责调用运算器和生成器达到生成算式和答案的目的。在命令行里面输出算式,然后由用户来作答,系统可以判断答案是否正确并给出正确率。
import java.util.Scanner;
import java.text.NumberFormat;
public class 驱动器 {
public static void main (String[] args){
int 正确个数=0;
Scanner scan = new Scanner(System.in);
NumberFormat 百分比形式 = NumberFormat.getPercentInstance();
生成算式 a = new 生成算式(2);
算式运算器 s = new 算式运算器();
格式转换器 g = new 格式转换器();
String b = a.生成(2);
String b1 = g.stringToArithmetic(b);
int answer1 = s.运算(b1);
System.out.print(b+"= ");
int Answer1 = scan.nextInt();
if (answer1 == Answer1) {
System.out.println("√");
正确个数 ++;
}
else
System.out.println("×");
UML图
-
Junit测试
JUnit测试中缀表达式转化为后缀表达式的转换器
JUnit测试两种引用(直接引用转换并计算和分步骤转换和计算)方式答案是否一样
-
运行截图
-
合作伙伴
-
姓名:莫礼钟
-
学号:20162319
-
博客链接:点击此处→
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架