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

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

一、需求分析(描述自己对需求的理解,以及后续扩展的可能性)

  • 实现整数加、减、乘、除运算。(通过堆栈运用后缀表达式实现结果)
  • 扩展:实现分数的加减乘除运算。题目去重、支持多语言、处理生成题目并输出到文件、完成题目后从文件读入并判题。

二、设计思路(同时输出UML类图)

通过对堆栈的学习运用压栈和弹栈进行计算。

  • 如果遇到数字,我们就直接将其输出。
  • 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈。
  • 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈。
  • 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符。最后将该元素入栈。
  • 如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

    思路图如下:

三、实现过程中的关键代码解释

import java.util.*;
import java.lang.*;
public class S {
   public static void main(String args[]) {
        Stack<Integer> stack=new Stack<Integer>();//创建堆栈
	String z =args.toString();
	int n = z.length();
	int k;
	for(int i=0;i<n;i++){
	k=Integer.parseInt(args[i]);
	if(k=='+'){//加运算
	Integer F1=stack.pop();
	int f1=F1.intValue();
	Integer F2=stack.pop();
	int f2=F2.intValue();
	Integer temp=new Integer(f1+f2);
	stack.push(temp);
	}
	else if(k=='-'){//减运算
	Integer F1=stack.pop();
	int f1=F1.intValue();
	Integer F2=stack.pop();
	int f2=F2.intValue();
	Integer temp=new Integer(f1-f2);
	stack.push(temp);
	}
	else if(k=='*'){//乘运算
	Integer F1=stack.pop();
	int f1=F1.intValue();
	Integer F2=stack.pop();
	int f2=F2.intValue();
	Integer temp=new Integer(f1*f2);
	stack.push(temp);
	}
	else if(k=='/'){//除运算
	Integer F1=stack.pop();
	int f1=F1.intValue();
	Integer F2=stack.pop();
	int f2=F2.intValue();
	Integer temp=new Integer(f1/f2);
	stack.push(temp);
	}
	else{
	stack.push(new Integer(Integer.parseInt(args[i]))); 
	}
	}
	Integer F1=stack.pop();
	int f1=F1.intValue();
      	System.out.println(f1);  //输出结果
   }    
}

四、遇到的困难及解决方法

这次实验我们小组有了思考的方向,两个人的结对学习提升了默契,两个人一个指挥一个掌舵,不断杨帆向前,虽然代码仍有bug,但是我们也依旧再完善,根据设计思路不断的修改,另一方面,依然有bug体现出来知识熟练度的欠缺,需要继续钻研,本周的进度就是这样,根据代码的完善,博客会更新,我相信在结对学习的努力下,我的Java学习会有所突破,不断进步。

结对编程照片

posted @ 2018-04-15 23:48  20165336康志强  Views(369)  Comments(0Edit  收藏  举报