java实现计算器

 import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;
public class ComputerPad extends Frame implements ActionListener
{
   NumberButton numberButton[];                 
   OperationButton oprationButton[];            
   Button 小数点按钮,正负号按钮,退格按钮,
          求倒数按钮,等号按钮,清零按钮;
   Panel panel;                                
   JTextField resultShow;                       
   String 运算符号[]={"+","-","*","/"};
   LinkedList 链表;                             
   boolean  是否按下等号=false;                 
 
 public ComputerPad()
   {
     super("计算器");
     链表=new LinkedList();
     numberButton=new NumberButton[10];         
     for(int i=0;i<=9;i++)
        {
          numberButton[i]=new NumberButton(i);
          numberButton[i].addActionListener(this);
        }
     oprationButton=new OperationButton[4];   
     for(int i=0;i<4;i++)
        {
          oprationButton[i]=new OperationButton(运算符号[i]);
          oprationButton[i].addActionListener(this);
        }
     小数点按钮=new Button(".");
     正负号按钮  =new Button("+/-");
     等号按钮=new Button("=");
     求倒数按钮=new Button("1/x");
     退格按钮=new Button("退格");
     清零按钮=new Button("C");
     清零按钮.setForeground(Color.red);
     退格按钮.setForeground(Color.red);
     等号按钮.setForeground(Color.red);
     求倒数按钮.setForeground(Color.blue);
     正负号按钮.setForeground(Color.blue);
     小数点按钮.setForeground(Color.blue);
     退格按钮.addActionListener(this);
     清零按钮.addActionListener(this);
     等号按钮.addActionListener(this);
     小数点按钮.addActionListener(this);
     正负号按钮.addActionListener(this);
     求倒数按钮.addActionListener(this);
     resultShow=new JTextField(10);
     resultShow.setHorizontalAlignment(JTextField.RIGHT);
     resultShow.setForeground(Color.blue);
     resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14));
     resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
     resultShow.setBackground(Color.white);
     resultShow.setEditable(false);
     panel=new Panel();                                            
     panel.setLayout(new GridLayout(4,5));
    
     panel.add(numberButton[1]);
     panel.add(numberButton[2]);
     panel.add(numberButton[3]);
     panel.add(oprationButton[0]);
     panel.add(清零按钮);
    
     panel.add(numberButton[4]);
     panel.add(numberButton[5]);
     panel.add(numberButton[6]);
     panel.add(oprationButton[1]);
     panel.add(退格按钮);
    
     panel.add(numberButton[7]);
     panel.add(numberButton[8]);
     panel.add(numberButton[9]);
     panel.add(oprationButton[2]);
     panel.add(求倒数按钮);
    
     panel.add(numberButton[0]);
     panel.add(正负号按钮);
     panel.add(小数点按钮);
     panel.add(oprationButton[3]);
     panel.add(等号按钮);
     add(panel,BorderLayout.CENTER);
     add(resultShow,BorderLayout.NORTH);
   
     addWindowListener(new WindowAdapter()
                    { public void windowClosing(WindowEvent e)
                       {
                         System.exit(0);
                       }
                    });
    setVisible(true);
    setBounds(100,50,240,180);
    setResizable(false);
    validate();
   }
 public void actionPerformed(ActionEvent e)
   {
  
    if(e.getSource() instanceof NumberButton)  
     {
       NumberButton b=(NumberButton)e.getSource();
        if(链表.size()==0)
         {
           int number=b.getNumber();         
           链表.add(""+number);              
           resultShow.setText(""+number);
           是否按下等号=false;
         }
       
        else if(链表.size()==1&&是否按下等号==false)
         {
           int number=b.getNumber();
           String num=(String)链表.getFirst();
           String s=num.concat(""+number);    
           链表.set(0,s);
           resultShow.setText(s);
         }
        else if(链表.size()==1&&是否按下等号==true)
         {
           int number=b.getNumber();
            链表.removeFirst();
           链表.add(""+number);                
           是否按下等号=false;
           resultShow.setText(""+number);
         }
        else if(链表.size()==2)               
         {
           int number=b.getNumber();          
           链表.add(""+number);              
                                             
           resultShow.setText(""+number);
         }
        else if(链表.size()==3)               
         {
           int number=b.getNumber();
           String num=(String)链表.getLast();
           String s=num.concat(""+number);    
           链表.set(2,s);
           resultShow.setText(s);
         }
     }
   else if(e.getSource() instanceof OperationButton)
     {
       OperationButton b=(OperationButton)e.getSource();
       if(链表.size()==1)
         {
           String fuhao=b.get运算符号();
          
           链表.add(fuhao);               
         }
       else if(链表.size()==2)
         {
           String fuhao=b.get运算符号();
           链表.set(1,fuhao);            
         }
       else if(链表.size()==3)
         {
           String fuhao=b.get运算符号();
           String number1=(String)链表.getFirst();
           String number2=(String)链表.getLast();
           String 运算符号=(String)链表.get(1);
           try
            {
               double n1=Double.parseDouble(number1);
               double n2=Double.parseDouble(number2);
               double n=0;
               if(运算符号.equals("+"))
                 {
                   n=n1+n2;
                 }
               else if(运算符号.equals("-"))
                 {
                   n=n1-n2;
                 }
               else if(运算符号.equals("*"))
                 {
                   n=n1*n2;
                 }
               else if(运算符号.equals("/"))
                 {
                   n=n1/n2;
                 }
               链表.clear();
               链表.add(""+n);                  
               链表.add(fuhao);                 
               resultShow.setText(""+n);
            }
          catch(Exception ee)
            {
            }
         }
     }
   else if(e.getSource()==等号按钮)
     {
        是否按下等号=true;
        if(链表.size()==1||链表.size()==2)                      
         {
           String num=(String)链表.getFirst();
           resultShow.setText(""+num);
         }
        else if(链表.size()==3)
         {
           String number1=(String)链表.getFirst();
           String number2=(String)链表.getLast();
           String 运算符号=(String)链表.get(1);
           try
            {
               double n1=Double.parseDouble(number1);
               double n2=Double.parseDouble(number2);
               double n=0;
               if(运算符号.equals("+"))
                 {
                   n=n1+n2;
                 }
               else if(运算符号.equals("-"))
                 {
                   n=n1-n2;
                 }
               else if(运算符号.equals("*"))
                 {
                   n=n1*n2;
                 }
               else if(运算符号.equals("/"))
                 {
                   n=n1/n2;
                 }
               resultShow.setText(""+n);
               链表.set(0,""+n);
               链表.removeLast(); 
               链表.removeLast(); 
           
            }
          catch(Exception ee)
            {
            }
         }
     }
   else if(e.getSource()==小数点按钮)
     {
        if(链表.size()==0)
         {
            是否按下等号=false;
         }
       else if(链表.size()==1)                              
        {
           String dot=小数点按钮.getLabel();            
           String num=(String)链表.getFirst();
           String s=null;
           if(num.indexOf(dot)==-1)                    
               {
                 s=num.concat(dot);
                 链表.set(0,s);                 
               }
           else
               {
                 s=num; 
               }
           链表.set(0,s);
           resultShow.setText(s);
        }
      
       else if(链表.size()==3)
        {
           String dot=小数点按钮.getLabel();            
           String num=(String)链表.getLast();
           String s=null;
           if(num.indexOf(dot)==-1)
              {
                s=num.concat(dot);
                链表.set(2,s);
              }
           else
              {
                s=num;
              }
           resultShow.setText(s);
        }
     }
     else if(e.getSource()==退格按钮)
     {
       if(链表.size()==1)                              
        {
           String num=(String)链表.getFirst();
           if(num.length()>=1)
            {
             num=num.substring(0,num.length()-1);
             链表.set(0,num);                 
             resultShow.setText(num);
            }
          else
            {
              链表.removeLast();                 
              resultShow.setText("0");
            }
        }
      else if(链表.size()==3)
        {
           String num=(String)链表.getLast();
           if(num.length()>=1)
            { num=num.substring(0,num.length()-1);
              链表.set(2,num);                 
              resultShow.setText(num);
            }
           else
            {
              链表.removeLast();                 
              resultShow.setText("0");
            }
        }  
     }
   else if(e.getSource()==正负号按钮)
     {
       if(链表.size()==1)
        {
          String number1=(String)链表.getFirst();
           try
              {
                double d=Double.parseDouble(number1);
                d=-1*d;
                String str=String.valueOf(d);
                链表.set(0,str);
                resultShow.setText(str);
              }
           catch(Exception ee)
              {
              }
        }
      else if(链表.size()==3)
        {
          String number2=(String)链表.getLast();
           try
              {
                double d=Double.parseDouble(number2);
                d=-1*d;
                String str=String.valueOf(d);
                链表.set(2,str);
                resultShow.setText(str);
              }
           catch(Exception ee)
              {
              }
        }
     }
   else if(e.getSource()==求倒数按钮)
     {
       if(链表.size()==1||链表.size()==2)
        {
          String number1=(String)链表.getFirst();
           try
              {
                double d=Double.parseDouble(number1);
                d=1.0/d;
                String str=String.valueOf(d);
                链表.set(0,str);
                resultShow.setText(str);
              }
           catch(Exception ee)
              {
              }
        }
       else if(链表.size()==3)
        {
          String number2=(String)链表.getLast();
           try
              {
                double d=Double.parseDouble(number2);
                d=1.0/d;
                String str=String.valueOf(d);
                链表.set(0,str);
                resultShow.setText(str);
              }
           catch(Exception ee)
              {
              }
        }
     }
   else if(e.getSource()==清零按钮)
     {
        是否按下等号=false;
        resultShow.setText("0");
        链表.clear();
     }
    }
 public  static void main(String args[])
   {
      new ComputerPad();
   } 
}

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class NumberButton extends Button
{
  int number;
  public NumberButton(int number)
   {
    super(""+number);
    this.number=number;
    setForeground(Color.blue);
   }
  public int getNumber()
   {
     return number;
   }
}

 

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class OperationButton extends Button
{
  String 运算符号;
  public OperationButton(String s)
   {
    super(s);
    运算符号=s;
    setForeground(Color.red);
   }
  public String get运算符号()
   {
     return 运算符号;
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值