计算器

package  yz;
//引入类
import  java.awt.*;
import  javax.swing.*;
import  java.awt.event.*;
import  java.math.BigDecimal;
public  class  Yz  extends  JFrame  implements  ActionListener {
     JPanel jsq;
     JTextField txt;
     JButton[] Nums;
     int  f=   0 ;
     Double g= 0.0 ,h= 0.0 ,j= 0.0 ;
     String fh= "" ;
     public  static  void  main(String[] args) {
         Yz y= new  Yz();
     }
     public  Yz(){
         jsq= new  JPanel();
         jsq.setLayout( new  GridLayout(   5 ,   4 ,   4 ,   4 ));
         Nums= new  JButton[  20 ];
         String []a={ "←" , "CE" , "C" , "%" ,
                 "7" , "8" , "9" , "/" ,
                 "4" , "5" , "6" , "*" ,
                 "1" , "2" , "3" , "-" ,
                 "." , "0" , "=" , "+" };
         for ( int  i=   0 ;i<Nums.length;i++){
             Nums[i]= new  JButton(a[i]);
             jsq.add(Nums[i]);
             Nums[i].addActionListener( this ); //注册监听
         }   
         txt= new  JTextField(  10 );
         txt.setText( "" );
         txt.setEditable( false );
         txt.setRequestFocusEnabled( false );
         txt.setHorizontalAlignment(JTextField.RIGHT);
         this .add(txt,BorderLayout.NORTH);
         this .add(jsq);
         this .setVisible( true );      //显示窗体
         this .setSize( 300 , 300 );      //窗体大小
         this .setLocation( 550 , 300 );  //出现位置
         this .setTitle( "计算器" );          //窗体标题
         this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭进程
     }
     //监听
     public  void  actionPerformed(ActionEvent e){
         String a=e.getActionCommand();
         int  b= "0123456789" .indexOf(a);
         int  c= "+-*/%" .indexOf(a);
         if (b!=-   1 ){ //如果按下的是数字
             if (f==   0 ){
                 txt.setText(a);
                 f=   1 ;
             }
             else
             {
                 String d = txt.getText();
                 txt.setText(d+a);
             }
         }
         else  if (c!=-   1 ) //如果按下的是运算符
         {
              
  
              if (c==   1 &&f==   0 ){
                  g= 0.0 ;
                  txt.setText(a);
                  f=   1 ;
              }
              else  if (txt.getText().equals( "" )){
                  JOptionPane.showMessageDialog( null "错误" "不能为零请重新输入" , JOptionPane.ERROR_MESSAGE);
              }
              else   {
              g=Double.valueOf(txt.getText());
              fh=a;
              txt.setText( "" );
             f=   0 ;
              }
              
         }
         else  if ( "=" ==a){ //如果按下的是等号
          
              if (txt.getText().equals( "" )){
                  h= 0.0 ;
              }
              else
                  h=Double.valueOf(txt.getText());
              if (fh== "+" ){ //如果按下的是加号
                 String d1 = String.valueOf(g+h).substring(   0 , String.valueOf(g+h).length());
                 double  i;
                 i=Double.valueOf(d1);
                 int  r=( int )i;
                 if (r==Double.valueOf(d1)){
                     d1=d1.substring(   0 , d1.length()-   2 );
                     txt.setText(d1);
                  }
                 else
                     txt.setText(d1);
              
              }
              if (fh== "-" ){ //如果按下的是减号
                    String d2 = String.valueOf(g-h).substring(   0 , String.valueOf(g-h).length());
                     double  i;
                     i=Double.valueOf(d2);
                     if (i>=   0 )
                     {
                         float  r=( float )i;
                          if (r==Double.valueOf(d2)){
                          d2=d2.substring(   0 , d2.length()-   2 );
                          txt.setText(d2);
                          
                          }
                          else {
                          txt.setText(d2);
                          }
                     }
                     else {
                          
                         txt.setText( new  BigDecimal(String.valueOf(g-h).substring(   0 , String.valueOf(g-h).length())).stripTrailingZeros().toString());
                          
                         }
                  }
              if (fh== "*" ){ //如果按下的是乘号
                     String d3 = String.valueOf(g*h).substring(   0 , String.valueOf(g*h).length());
                     double  i;
                     i=Double.valueOf(d3);
                     int  r=( int )i;
                     if (r==i){
                         d3=d3.substring(   0 , d3.length()-   2 );
                         txt.setText(d3);
                      
                      }
                     else {
                         txt.setText(d3);  
                      
                     }
                  }
              if (fh== "/" ){ //如果按下的是除号
                  if (h== 0.0 ){
                      JOptionPane.showMessageDialog( null "错误" "除数不能为零请重新输入" , JOptionPane.ERROR_MESSAGE);
                      txt.setText( "" );
                  }
                  else {
                        String d4 = String.valueOf(g/h).substring(   0 , String.valueOf(g/h).length());
                         double  i;
                         i=Double.valueOf(d4);
                         int  r=( int )i;
                         if (r==Double.valueOf(d4)){
                             d4=d4.substring(   0 , d4.length()-   2 );
                             txt.setText(d4);
                              
                          }
                         else {
                             txt.setText(d4);
                              
                         }
                 
              }
              if (fh== "%" ){
                  String n = txt.getText();
                  txt.setText(String.valueOf(g/ 100 ));
                  }
         }
         else  if ( "CE" ==a){
             h= 0.0 ;
             txt.setText( "" );
        
         else  if ( "C" ==a){
             g= 0.0 ;
             h= 0.0 ;
             f=   0 ;
             txt.setText( "" );
        
         else  if ( "." ==a){
              String n = txt.getText();
              if (txt.getText().trim().indexOf( "." )!=-   1 ) ;
              else
              txt.setText(n+ "." );
         }
         else  if ( "←" ==a){
             String xs=txt.getText();
             if (xs.length()>=   1 )
                 xs=xs.substring(   0 , xs.length()-   1 );
             txt.setText(xs);
         }
     }
}

 

你可能感兴趣的:(计算器)