【week2】结对编程-四则运算 及感想

首先我要说一下,我得作业我尽力了,但是能力有限,还需练习。

四则运算,改进代码流程:

1.手动输入算式(属于中缀表达式)

2.将中缀表达式转化成后缀表达式 生成out数组

3.一个操作数栈,一个运算符栈,按照后缀表达式计算方法将out中的字符分别放入两个栈

4.当操作数栈只有一个数时结束计算。

代码分段解析如下:

中缀变后缀:

public List<String> SolveOrder(String[] in,HashMap<String,Integer>precedence){
		//符合逆波兰式(后缀)的输出
		List<String> out = new ArrayList<String>();
		//操作符
		Stack<String> ops= new Stack<String>();
		for(int i=0;i<in.length;i++){
			String s=in[i];
			//碰见数值 就放进out数组末尾
			if(!precedence.containsKey(in[i])){
				out.add(s);
				continue;
			}
			while(true){
				//当存储操作符的栈中“空”或“遇见左括号”或“栈顶的运算符优先级
                                // 小于读取字符串当前字符的优先级”时,符号入栈
				if(ops.isEmpty()||s.equals("(")||(precedence.get(s)
                                 >precedence.get(ops.peek()))){
					ops.push(s);
					break;
				}
				String op=ops.pop();//出栈得运算符
				if(op.equals("(")){
					break;
				}else{
					out.add(op);
				}
			}
		}
		//若操作符栈不为空,就依次将剩余的操作符放入out数组
		while(!ops.isEmpty()){
			out.add(ops.pop());
		}
		return out;
}

根据后缀(逆波兰式)计算。

public double calculateOut(String[] out) {
	//假设满足逆波兰式的输出不为空却长度不为零
	assert (out != null && out.length != 0);
	//操作数栈
	Stack<Double> stack = new Stack<Double>();
	for (int i = 0; i < out.length; i++) {
		if (isNumber(out[i])) {
			stack.push(Double.parseDouble(out[i]));
		} else {
			double v1 = stack.pop();
			double v2 = stack.pop();
			double result = eval(out[i], v2, v1);
			stack.push(result);
		}
	}
	return stack.pop();
}

主函数:控制台输入完整算式。

    public static void main(String[] args) {
		System.out.println("请输入要计算的算式:");
		Scanner sc= new Scanner(System.in);
		String inBefor = sc.nextLine();
		String[] in=inBefor.split("");
		Cal cc = new Cal();
		HashMap<String, Integer> precedence=cc.priorityInfo();;
		cc.SolveOrder(in, precedence);
		System.out.println("所输入的算式结果为:"+cc.calculateOut(in));

	}

老师,这段代码我是看的别人博客上写的,只能说我看懂了,还没到您要求的变成自己的,但是,老师 ,我实在写不动了。。

关于结对编程,从上这门课是从无到有的认识。编程这种东西就像思想,两个人share就是两个人都有两种。争吵中才会进步。

1.最开始的争论是关于用java还是c++?由于我俩未来可能想更多的使用java所以,最后决定用java。

2.关于复杂运算有两种思想:对五个数字产生的四个运算符 进行讨论,四个位置分别讨论+—*/另一种就是使用堆栈进行计算,最后还是堆栈代码量比较小,选定!

3.关于数字与符号的存储方式,一种是用类,一种是分为两个数组。用类,在处理数组与字符的int String类型上不方便,最后决定用两个数组。

4.最后的代码加不加原来的两个操作数的代码,最后没加。

5.代码还有一点问题,发不发博客?最后还是发了。。。

(关于照片,这些工作都是在校的前期做的,现在我俩都各自回家了。。)

结语:我去睡觉了,现在已经5:27了

代码地址:https://git.coding.net/yumiaomiao/Arithmetic.git

ssh:[email protected]:yumiaomiao/Arithmetic.git

时间: 2025-02-01 11:45:23

【week2】结对编程-四则运算 及感想的相关文章

作业四:结对编程——四则运算

项目名称:结对编程——四则运算(GUI) 同学小伙伴:张富彬 博客园地址:http://www.cnblogs.com/legend07/ GitHub代码地址:https://github.com/8561549/Arithmetic2.0/tree/master/Arithmetic2.0 需求分析: 首先是实现GUI的界面设计,主要有两个窗体,一个窗体进行参数设计,另一个窗体负责显示题目.两个窗体之间实现自由跳转.在参数设置窗口可以获取各个控件中的信息,能对出题窗口的出题情况进行限制,其中

结对编程——四则运算(第一周)

结对编程--四则运算(第一周) 需求分析 题目要求 一个命令行程序实现: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 需求理解 输入:需要计算的式子数.计算结果 输出:判断后的答案(true/false) 满足真分数的运算如:1/3 + 1/4 = 7/12 处理的运算符为 +, ?, ×, ÷ 能处理用户的输入,并判断对错,统计正确率. 设计思路 自动生成四则运算,需要用到随机数,用随机数随机生成数字,以及随机

结对编程-四则运算 第一周总结

结对编程-四则运算 第一周总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 需求分析 可以生成不同种类的题目 根据用户的需求来生成不同的题目 计算时生成真分数和整数,且结果为分数形式输出 可以输出括号 可以判断用户的正确 设计思路 第一种 设计一个level1类,只负责加减 设计一个level2类,只负责乘除 设计一个level3类,只负责加减乘除 设计一个转化类,将上述的类生成的表达式转换成计算式 比对结果类 缺点 在将括号进行插入时出现问题,难以将

20172316 结对编程-四则运算 第一周 阶段总结

20172316 结对编程-四则运算 第一周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能) 可生成不同等级题目,类似于: 1级题目:2 + 5 = 10 - 5 = 之类的两个数,一个运算符的题目 2.题目运算(判题) 可独立使用 实现中缀表达式转为后缀表达式并计算 判断用户答题正误,并输出正确结果 3.支持真分数 可独立使用 实现分数算式的计算 4.题目去重(扩展需求,加分项) 可独立使用 实现对自动生成

20172316 结对编程-四则运算 第二周 阶段总结

20172316 结对编程-四则运算 第二周 阶段总结 1.项目内容 以结对小组形式编写代码,实现以下功能: 1.自动生成题目 2.题目运算(判题) 3.支持真分数 4.生成题目添加括号 5.题目去重(扩展需求,加分项) 6.文件处理(扩展需求,自行学习,加分项) 相关过程截图 最开始的代码名称十分不规范,有的使用拼音,有的使用英文,有的不知所云,其他组员第一次看见名称时不容易理解和衔接起来: 出现了两个程序之间符号表示的差异,对于式子的值的计算有很大影响: 结对评价 唐才铭 王文彬 关键代码解

结对编程--四则运算(Java实现)

结对编程--四则运算(Java实现) 四则运算 (JAVA ) By 梅进鹏 欧思良 Github项目地址:https://github.com/MeiJinpen/Arithmetic 功能要求 题目:实现一个自动生成小学四则运算题目的命令行程序 功能(已全部实现) 使用 -n 参数控制生成题目的个数 使用 -r 参数控制题目中数值(自然数.真分数和真分数分母)的范围(此处感觉一个参数不太合理,因此改用 -r 参数控制自然数.带分数整数部分的范围,又额外添加了 -d 参数控制分数分母的范围,增

软件工程项目之二:结对编程——四则运算生成计算程序

0x01 :简介 本次的编程任务是完成一个具有UI界面的,具备四则运算生成.计算.判断对错功能的程序.本次程序使用C#语言编写,用时为2周. 0x02 :软件工程和PSP表格记录 PSP 2.1 Persinal Software Process Stages Time(Estimated) Time(Real) Planning 计划     Estimate 估计这个任务需要多少时间 24h 36h Development 开发     Analysis 需求分析(包括学习新技术) 8~10

作业四——结对编程四则运算

1. 结对编程项目---四则运算 此次编程项目的结队伙伴是方春阳 学号:130201129 计科13-1 博客地址 http://www.cnblogs.com/fcy29/ 根据要求我们设计了以下程序: 主界面: 在该页面下,可以看到此四则运算的主要功能,可以自行选择数的范围,系统默认值为1-100之间,超出这个范围并未得以实现,输入要生成题目的数量,然后按要求选择在算式中是否有乘除.负数.括号及真分数等功能,选择完成后,选好生成方式,点击确定.就可在框中自动生成算式.单击退出按钮便可退出该程

《结对编程-四则运算生成器-开发过程》

结对编程队员:张常瑞 孙宇林 我们组做的编程项目是四则运算答题器. 算法的主要思想就是将一个中缀表达式(Infix expression)转换成便于处理的后缀表达式(Postfix expression),然后借助于栈这个简单的数据结构,计算出表达式的结果. 遇到的问题:如何将普通的表达式转换成后缀表达式,以及如何处理后缀表达式并计算出结果 解决办法:正在努力寻找中