import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calc extends WindowAdapter implements ActionListener
{
  boolean a1=true;
  boolean a2=true;
  boolean a3=true;
  boolean f1=true;
  boolean f2=true;
  boolean f3=true;
  boolean c1=true;
  boolean c2=true;
  boolean d1=true;
  boolean d2=true;
  boolean e1=true;
  boolean g=true;
  double suma=0;
  double sumb=0;
  double sumc=1;
  double sumd=1;
  Frame f;
  JTextField tf;
  Panel p;
  Button b0=new Button("1");
  Button b1=new Button("2");
  Button b2=new Button("3");
  Button b3=new Button("/");
  Button b4=new Button("c");
  Button b5=new Button("4");
  Button b6=new Button("5");
  Button b7=new Button("6");
  Button b8=new Button("*");
  Button b9=new Button("退格");
  Button b10=new Button("7");
  Button b11=new Button("8");
  Button b12=new Button("9");
  Button b13=new Button("-");
  Button b14=new Button("1/r");
  Button b15=new Button("0");
  Button b16=new Button("+/-");
  Button b17=new Button(".");
  Button b18=new Button("+");
  Button b19=new Button("=");
  public void display()
  {
    f=new Frame("计算器");
    f.setSize(200,200);
    f.setLocation(200,140);
    f.setBackground(Color.lightGray);
    tf=new JTextField("0",5);
    tf.setHorizontalAlignment(JTextField.RIGHT);
    f.add(tf,"North");
    p=new Panel();
    p.setLayout(new GridLayout(4,5));
    f.add(p);
    p.add(b0);
    p.add(b1);
    p.add(b2);
    p.add(b3);
    p.add(b4);
    p.add(b5);
    p.add(b6);
    p.add(b7);
    p.add(b8);
    p.add(b9);
    p.add(b10);
    p.add(b11);
    p.add(b12);
    p.add(b13);
    p.add(b14);
    p.add(b15);
    p.add(b16);
    p.add(b17);
    p.add(b18);
    p.add(b19);
    b0.addActionListener(this);
    b1.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    b4.addActionListener(this);
    b5.addActionListener(this);
    b6.addActionListener(this);
    b7.addActionListener(this);
    b8.addActionListener(this);
    b9.addActionListener(this);
    b10.addActionListener(this);
    b11.addActionListener(this);
    b12.addActionListener(this);
    b13.addActionListener(this);
    b14.addActionListener(this);
    b15.addActionListener(this);
    b16.addActionListener(this);
    b17.addActionListener(this);
    b18.addActionListener(this);
    b19.addActionListener(this);
    f.addWindowListener(new WinClose());
    f.setVisible(true);
  }
  public void actionPerformed(ActionEvent e)
  {
   if((e.getSource()!=b3)&&(e.getSource()!=b4)&&(e.getSource()!=b8)&&(e.getSource()!=b9)&&(e.getSource()!=b13)&&(e.getSource()!=b14)&&(e.getSource()!=b16)&&(e.getSource()!=b17)&&(e.getSource()!=b18)&&(e.getSource()!=b19))
   {
   if(a1&&f1&&c1&&d1)
   {
   if(((Double.parseDouble(tf.getText())==0)&&g!=false)||(e1==false))
   {
   tf.setText("");
   tf.setText(tf.getText()+e.getActionCommand());e1=true;
   }
   else
   tf.setText(tf.getText()+e.getActionCommand());
   }
   else
  
   {
   tf.setText("");
   tf.setText(tf.getText()+e.getActionCommand());
   a1=f1=c1=d1=true;
   }
   }
   if((e.getSource()==b18))
   {
   if(!f2)
   suma=sumb-Double.parseDouble(tf.getText());
   if(!c2)
   suma=sumc*Double.parseDouble(tf.getText());
   if(!d2)
   suma=(double)sumd/Double.parseDouble(tf.getText());
   if(c2&&f2&&d2)
   suma+=Double.parseDouble(tf.getText());
   a1=false;a2=false;a3=false;
   f1=true;f2=true;c1=true;c2=true;d1=true;d2=true;f3=true;e1=true;g=true;
   }
   
if((e.getSource()==b13))
   {
   if(!a2)
   sumb=suma+Double.parseDouble(tf.getText());
   if(!c2)
   sumb=sumc*Double.parseDouble(tf.getText());
   if(!d2)
   sumb=(double)sumd/Double.parseDouble(tf.getText());
   if(!f2)
   sumb-=Double.parseDouble(tf.getText());
                if(a2&&c2&&d2&&f2)
   sumb=Double.parseDouble(tf.getText())-sumb;
   f1=false;f2=false;f3=false;
   a1=true;a2=true;c1=true;c2=true;d1=true;d2=true;a3=true;e1=true;g=true;
   }
   if((e.getSource()==b8))
   {
   if(!d2)
   sumc=(double)sumd/Double.parseDouble(tf.getText());
   else
   sumc*=Double.parseDouble(tf.getText());
   c1=false;c2=false; 
   f1=true;f2=true;d1=true;d2=true;a1=true;a2=true;e1=true;g=true;
   }
   if((e.getSource()==b3))
   {
   if(!c2)
   sumd=sumc*Double.parseDouble(tf.getText());
   else
   {
       if(d2)
   sumd=Double.parseDouble(tf.getText())/(double)sumd;
       else
           sumd=(double)sumd/Double.parseDouble(tf.getText());
   }
   d1=false;d2=false; 
   f1=true;f2=true;c1=true;c2=true;a1=true;a2=true;e1=true;g=true;
   }
   if((e.getSource()==b19))
   {
   if(!a2)
   tf.setText(""+(suma+Double.parseDouble(tf.getText())));
   if(!f2)
   tf.setText(""+(sumb-Double.parseDouble(tf.getText())));
   if(!c2)
                        {
                          if(!a3)
            tf.setText(""+(sumc*Double.parseDouble(tf.getText())+suma));
                          if(!f3)
            tf.setText(""+(sumb-(sumc*Double.parseDouble(tf.getText()))));
                          if(a3&&f3)
                                 tf.setText(""+(sumc*Double.parseDouble(tf.getText())));
                        }
   if(!d2)
                        {
                          if(!a3)
            tf.setText(""+((double)sumd/Double.parseDouble(tf.getText())+suma));
             if(!f3)
            tf.setText(""+(sumb-((double)sumd/Double.parseDouble(tf.getText()))));
             if(a3&&f3)
            tf.setText(""+((double)sumd/Double.parseDouble(tf.getText())));
                        }
   a1=true;
        a2=true;
a3=true;
f1=true;
f2=true;
f3=true;
c1=true;
c2=true;
d1=true;
d2=true;
e1=false;
suma=0;
sumb=0;
sumc=1;
sumd=1;
                g=true;
   }
   if((e.getSource()==b4))
   {
   tf.setText("0");
   a1=true;
        a2=true;
a3=true;
f1=true;
f2=true;
f3=true;
c1=true;
c2=true;
d1=true;
d2=true;
e1=true;
                g=true;
suma=0;
sumb=0;
sumc=1;
sumd=1;
}
if((e.getSource()==b14))
   {
   tf.setText(""+((double)1/Double.parseDouble(tf.getText())));
   }
        if((e.getSource()==b9))
   {
   int l=(tf.getText()).length();
                if(l==1)
                        {
                           tf.setText("");
              tf.setText("0");
                        }   
                if(l>1)
                      tf.setText(tf.getText().substring(0,l-1));
   }
   if((e.getSource()==b16))
   {
  
   tf.setText(""+(-Double.parseDouble(tf.getText())));
   }
   if((e.getSource()==b17))
   {
                if(g)
        tf.setText(tf.getText()+".");
                g=false;
   }
 }
  public static void main(String[] args)
      {
         (new Calc()).display();
      }
}
class WinClose extends WindowAdapter
{
public  void windowClosing(WindowEvent e)
{
System.exit(0);
        }
}
    
 我想知道有颜色部分的程序的含义,实在不理解,那位大哥不吝赐教下 谢谢   
    
    
  
  
  

解决方案 »

  1.   

      if((e.getSource()==b18)) 
      { 
      if(!f2) 
      suma=sumb-Double.parseDouble(tf.getText()); 
      if(!c2) 
      suma=sumc*Double.parseDouble(tf.getText()); 
      if(!d2) 
      suma=(double)sumd/Double.parseDouble(tf.getText()); 
      if(c2&&f2&&d2) 
      suma+=Double.parseDouble(tf.getText()); 
      a1=false;a2=false;a3=false; 
      f1=true;f2=true;c1=true;c2=true;d1=true;d2=true;f3=true;e1=true;g=true; 
      }
    其实我只是想知道IF(!F2),  if(!c2),if(!d2),if(c2&&f2&&d2)这些语句的作用
      
      

  2.   


    if((e.getSource()==b18)) //获取事件源
      { 
      if(!f2)  //-号
      suma=sumb-Double.parseDouble(tf.getText()); 
      if(!c2)  //*号
      suma=sumc*Double.parseDouble(tf.getText()); 
      if(!d2)  //除号
      suma=(double)sumd/Double.parseDouble(tf.getText()); 
      if(c2&&f2&&d2) 
      suma+=Double.parseDouble(tf.getText()); 
      a1=false;a2=false;a3=false; 
      f1=true;f2=true;c1=true;c2=true;d1=true;d2=true;f3=true;e1=true;g=true; //复位
      }