完美计算器用栈解决运算优先级问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

完美计算器(用栈解决运算优先级问题)

import java.applet.*;

import java.awt.*;

import java.util.*;

public class Calculator extends Applet

{

public void init()

{

setLayout(new BorderLayout());

Panel p1=new Panel();

p1.setBackground(Color.gray);//设置p1的背景色

display=new ExpTextField( " ",30);

p1.add(display);

p1.add(new Button( "清空"));

add( "North ",p1);

Panel p2=new Panel();

p2.setLayout(new GridLayout(3,6));//网格布局

p2.add(new Button( "7 "));

p2.add(new Button( "8 "));

p2.add(new Button( "9 "));

p2.add(new Button( "( "));

p2.add(new Button( ") "));

p2.add(new Button( "= "));

p2.add(new Button( "4 "));

p2.add(new Button( "5 "));

p2.add(new Button( "6 "));

p2.add(new Button( ". "));

p2.add(new Button( "+ "));

p2.add(new Button( "- "));

p2.add(new Button( "1 "));

p2.add(new Button( "2 "));

p2.add(new Button( "3 "));

p2.add(new Button( "0 "));

p2.add(new Button( "* "));

p2.add(new Button( "/ "));

add( "Center ",p2);

}

public boolean action(Event e,Object a)//按钮事件的action方法

{

if(a instanceof String)

{

if(a.equals( "清空"))//清空

{

display.setText( " ");

return true;

}

display.setText(display.getText()+(String)a);

if(a.equals( "= "))//当用户按下=键开始计算

display.setText(EvaluateExpression.calculate(display.getText()));

return true;

}

else

return super.action(e,a);//如果事件没有处理,将事件传输到该类在继承体系中父类去处理}

private ExpTextField display;

}

class ExpTextField extends TextField

{

public ExpTextField(String s,int n)

{

super(s,n);

}

public boolean keyDown(Event e,int key)

{

if(key==61)//=键

{

setText(getText()+ "= ");

setText(EvaluateExpression.calculate(getText()));

return true;

}

else if(key==27)//Esc键

{

setText( " ");

return true;

}

else if((key> =40)&&(key <=57)&&(key!=44)//数字或运算符

||(key==8)||(key==127)//Backspace键或delete键

||(key==Event.LEFT)||(key==Event.RIGHT)//左右键

||(key==Event.HOME)||(key==Event.END))//Home键或End键

return super.keyDown(e,key);

else //忽略其它键

return true;

}

}

class EvaluateExpression //算符优先算法

{

public static String calculate(String exp)

{

char lastoptr= '= ';

char c;

char ch;

double d1;//操作数

double d2;//操作数

String opnd= " ";

String result;

Stack optrstack=new Stack();//运算符栈

Stack opndstack=new Stack();//操作数栈

optrstack.push(new Character( '= '));

try

{

for(int i=0;i <exp.length();i++)

{

c=exp.charAt(i);//输入的字符

if(Character.isDigit(c)||(c== '. '))//操作数

{

opnd=opnd+c;

}

else if((c== '+ ')||(c== '- ')||(c== '* ')||(c== '/ ')||(c== '( ')||(c== ') ')||(c== '= '))//运算符

{

相关文档
最新文档