java编写的简易计算器
2014-08-25 19:31
183 查看
此次编写java计算器,是基于栈的使用实现的。
编写难点:主要 是实现运算符的优先级问题,通过创建了四个栈stack1,stack2,stack3,stack4. stack1和stack3分别用来存储数值的,stack2和stack4用来存放运算符。
我的思想是将连续输入的数字组成一个整数存入到stack1中,将运算符存入stack2中,至于stack3则是已经遍历过一次栈,将优先级高的乘和除计算后存入stack3数据栈中,
stack4栈其实只存放了加法和减法运算符。本计算器没有实现左括号,右括号的功能。
核心代码如下:
完整代码链接(不需要资源分):http://download.csdn.net/detail/tan313/7817541
编写难点:主要 是实现运算符的优先级问题,通过创建了四个栈stack1,stack2,stack3,stack4. stack1和stack3分别用来存储数值的,stack2和stack4用来存放运算符。
我的思想是将连续输入的数字组成一个整数存入到stack1中,将运算符存入stack2中,至于stack3则是已经遍历过一次栈,将优先级高的乘和除计算后存入stack3数据栈中,
stack4栈其实只存放了加法和减法运算符。本计算器没有实现左括号,右括号的功能。
核心代码如下:
public void actionPerformed(ActionEvent e) { //将数据与运算符都存进去了 String str = null; if(!(str = e.getActionCommand()).equals("=")){ if(str.equals(".")){ flag = true; } if(!str.equals("*")&&!str.equals("\\")&&!str.equals("+")&&!str.equals("-")){ if(flag){ if(!str.equals(".")){ stackNum = (float) (stackNum+Integer.parseInt(str)/(Math.pow(10,t))); t=t+1; } } else if(!flag){ stackNum = stackNum*10+Integer.parseInt(str); } k = stackNum; } if(str.equals("*")||str.equals("\\")||str.equals("+")||str.equals("-")){ stack1.push(stackNum); flag = false; jtf.setText(jtf.getText()+Float.valueOf(stackNum).toString()); stackNum = 0; char[] c = str.toCharArray(); switch (c[0]) { case '*': jtf.setText(jtf.getText()+Character.valueOf('*').toString()); stack2.push('*'); break; case '\\': jtf.setText(jtf.getText()+Character.valueOf('\\').toString()); stack2.push('\\'); break; case '+': jtf.setText(jtf.getText()+Character.valueOf('+').toString()); stack2.push('+'); break; case '-': jtf.setText(jtf.getText()+Character.valueOf('-').toString()); stack2.push('-'); break; default: break; }//switch }//else if }//if // if(e.getActionCommand().equals("=")){ stack1.push(k); System.out.println(k); System.out.println("stack1的大小"+stack1.getSize()); System.out.println("stack2的大小"+stack2.getSize()); jtf.setText(jtf.getText()+Float.valueOf(k).toString());//都存进了stack1了 while(!stack1.isEmpty()){//12+3*5,1+1,3*3,1+1*1+1\1 char c[] = stack2.pop().toString().toCharArray(); if((Character.valueOf(c[0]).toString()).equals("*")){ float num = Float.parseFloat(stack1.pop().toString()); float num1 = Float.parseFloat(stack1.pop().toString()); stack3.push(num1*num); } if((Character.valueOf(c[0]).toString()).equals("\\")){ float num = Float.parseFloat(stack1.pop().toString()); float num1 = Float.parseFloat(stack1.pop().toString()); stack3.push(num1/num); } else if((Character.valueOf(c[0]).toString()).equals("+")||(Character.valueOf(c[0]).toString()).equals('-')){ stack4.push(c[0]); } else if(!stack1.isEmpty()&&stack2.isEmpty()){ stack3.push(stack1.pop()); } }//while float number2 = Float.parseFloat( stack3.pop().toString()); while(!stack3.isEmpty()){ char c2[] = stack4.pop().toString().toCharArray(); switch (c2[0]) { case '+': number2 = Float.valueOf(stack3.pop().toString())+number2; break; case '-': number2 = Float.valueOf(stack3.pop().toString())-number2; break; default: break; }//switch } if(stack3.isEmpty()){ jtf.setText(Float.valueOf(number2).toString()); } } }//actionPerformed
完整代码链接(不需要资源分):http://download.csdn.net/detail/tan313/7817541
相关文章推荐