Tank03 发表于 2013-2-5 09:18:33

一个简单的计算器

这是在大1第2个学期在学校参加比赛的时候做的,呵呵~~现在去看这些代码,觉得青涩,却又饶有回忆,不过如果当初没有这个小例子,我有可能已经去NET的行列了.呵呵~~不罗嗦那么多了.自己看把.时间有些紧张,没有写解释.不懂可以留言,或者百度一下.
 
 

package CalcApp;import java.awt.*;import java.awt.event.*;public class CalcAppDemo extends Frame{private TextField t_result;private Panel p_main;private Panel p_num;private Panel p_oper;private Panel p_show;private Button b_num[];private Button b_oper[];public CalcAppDemo(String title){setTitle(title);setLocation(500,300);t_result=new TextField("0.0",21);p_main=new Panel();                p_num=new Panel();p_oper=new Panel();p_show=new Panel();p_main.setLayout(new BorderLayout());p_num.setLayout(new GridLayout(4,3,1,1));p_oper.setLayout(new GridLayout(4,2,1,1));    b_num=new Button;for(int i=0;i<9;i++){                  b_num=new Button(new Integer(i+1).toString());}b_num=new Button(" 0");b_num=new Button(" cls");b_num=new Button(" .");for(int i=0;i<12;i++){                  p_num.add(b_num);}    b_oper=new Button;b_oper=new Button(" +");b_oper=new Button(" -");b_oper=new Button(" *");b_oper=new Button(" /");b_oper=new Button(" pow");b_oper=new Button(" sqrt");                b_oper=new Button(" +/-");b_oper=new Button(" =");for(int i=0;i<8;i++){                  p_oper.add(b_oper);}    t_result.setEditable(false);p_show.add(t_result,BorderLayout.NORTH);p_main.add(p_show,BorderLayout.NORTH);p_main.add(p_num,BorderLayout.WEST);p_main.add(p_oper,BorderLayout.EAST);this.add(p_main,BorderLayout.CENTER);setSize(400,400);setResizable(false);pack();    this.addWindowListener(new WindowAdapter(){   public void windowClosing(WindowEvent e)   {    System.exit(0);   }});ButtonListener bl=new ButtonListener();for(int i=0;i<12;i++){   b_num.addActionListener(bl);}for(int i=0;i<8;i++){   b_oper.addActionListener(bl);}}class ButtonListener implements ActionListener{private String lastOp;private String strVal;private double total;private double number;private boolean firsttime;private boolean operatorPressed;    ButtonListener(){   firsttime=true;   strVal="";}    public void actionPerformed(ActionEvent e){   String s=((Button)e.getSource()).getLabel().trim();      if(Character.isDigit(s.charAt(0)))   {    handleNumber(s);   }   else   {    calculate(s);   }}    void calculate(String op){   operatorPressed=true;      if(firsttime&&!isUnary(op))   {    total=getNumberOnDisplay();    firsttime=false;   }   if(isUnary(op))   {    handleUnaryOp(op);   }   else if(lastOp!=null)   {    handleBinaryOp(lastOp);   }   if(!isUnary(op))   {    lastOp=op;   }}    boolean isUnary(String s){   return s.equals("=")||s.equals("cls")||s.equals("sqrt")||s.equals("+/-")||s.equals(".");}    void handleUnaryOp(String op){   if(op.equals("+/-"))   {    number=negate(getNumberOnDisplay()+"");    t_result.setText("");    t_result.setText(number+"");    return;   }   else if(op.equals("."))   {    handleDecPoint();    return;   }   else if(op.equals("sqrt"))   {    number=Math.sqrt(getNumberOnDisplay());    t_result.setText("");    t_result.setText(number+"");    return;   }   else if(op.equals("="))   {    if(lastOp!=null&&!isUnary(lastOp))    {   handleBinaryOp(lastOp);    }    lastOp=null;    firsttime=true;    return;   }   else   {    clear();   }}    void handleBinaryOp(String op){   if(op.equals("+"))   {    total+=number;   }   else if(op.equals("-"))   {    total-=number;   }   else if(op.equals("*"))   {    total*=number;   }   else if(op.equals("/"))   {    try    {   total/=number;    }    catch(ArithmeticException ae)    {    }   }   else if(op.equals("pow"))   {    total=Math.pow(total,number);   }   t_result.setText("");   lastOp=null;   strVal="";   number=0;   t_result.setText(total+"");}    void handleNumber(String s){   if(!operatorPressed)   {    strVal+=s;   }   else   {    operatorPressed=false;    strVal=s;   }   number=new Double(strVal).doubleValue();   t_result.setText("");   t_result.setText(strVal);}    void handleDecPoint(){   operatorPressed=false;   if(strVal.indexOf(".")<0)   {    strVal+=".";   }   t_result.setText("");   t_result.setText(strVal);}    double negate(String s){   operatorPressed=false;   if(number==(int)number)   {    s=s.substring(0,s.indexOf("."));   }   if(s.indexOf("-")<0)   {    strVal="-"+s;   }   else   {    strVal=s.substring(1);   }   return new Double(strVal).doubleValue();}    double getNumberOnDisplay(){   return new Double(t_result.getText()).doubleValue();}    void clear(){   firsttime=true;   lastOp=null;   strVal="";   total=0;   number=0;   t_result.setText("0");}}public static void main(String args[]){CalcAppDemo c=new CalcAppDemo("简单计算器");c.setVisible(true);}}
页: [1]
查看完整版本: 一个简单的计算器