⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a5i13w.java

📁 用java写的计算器
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.Date;
public class A5i13w extends Frame implements ActionListener{
  private Label Labelshow=new Label("显示区:");
  private Label Labelsay=new Label("状态:",Label.CENTER);
  private Label Labelnow=new Label("欢迎使用我,艾全通为你带来的科学计算器",Label.LEFT);
  private Label Labeltime=new Label("暂且为空");
  private TextField Textshow=new TextField(40);
  private Panel pan1=new Panel(); 
  private Panel pan2=new Panel(); 
  private Panel pan3=new Panel();
  private Button button1=new Button("1");
  private Button button2=new Button("2");
  private Button button3=new Button("3");
  private Button button4=new Button("4");
  private Button button5=new Button("5");
  private Button button6=new Button("6");
  private Button button7=new Button("7");
  private Button button8=new Button("8");
  private Button button9=new Button("9");
  private Button button10=new Button("0");
  private Button button11=new Button("+");
  private Button button12=new Button("-");
  private Button button13=new Button("× ");
  private Button button14=new Button("÷");
  private Button button15=new Button("%");
  private Button button16=new Button("(");
  private Button button17=new Button(")");
  private Button button18=new Button("清零");
  private Button button19=new Button(".");
  private Button button20=new Button("=");
  private Font wordFont1 =new  Font("TimesRoman",Font.BOLD,13);
  private Font wordFont2 =new  Font("TimesRoman",Font.BOLD,30);
  private int i;
  public A5i13w(){
   super("我的科学计算器");
   setup();
   button1.addActionListener(this);
   button2.addActionListener(this); 
   button3.addActionListener(this); 
   button4.addActionListener(this); 
   button5.addActionListener(this); 
   button6.addActionListener(this); 
   button7.addActionListener(this); 
   button8.addActionListener(this); 
   button9.addActionListener(this); 
   button10.addActionListener(this); 
   button11.addActionListener(this);
   button12.addActionListener(this); 
   button13.addActionListener(this); 
   button14.addActionListener(this); 
   button15.addActionListener(this); 
   button16.addActionListener(this);
   button17.addActionListener(this);
   button18.addActionListener(this);
   button19.addActionListener(this);
   button20.addActionListener(this);
  addWindowListener(new windowcloser());
   setResizable(false);
   pack();
   setVisible(true);
   }
 public void setup(){
  pan1.setLayout(new BorderLayout());
   Labelshow.setFont(wordFont1);
   pan1.add("West",Labelshow);
   Textshow.setFont(wordFont1);
   pan1.add("Center",Textshow);
  pan2.setLayout(new GridLayout(4,5,5,6));
   button1.setFont(wordFont2);pan2.add(button1);
   button2.setFont(wordFont2);pan2.add(button2);
   button3.setFont(wordFont2);pan2.add(button3);
   button4.setFont(wordFont2);pan2.add(button4);
   button5.setFont(wordFont2);pan2.add(button5);
   button6.setFont(wordFont2);pan2.add(button6);
   button7.setFont(wordFont2);pan2.add(button7);
   button8.setFont(wordFont2);pan2.add(button8);
   button9.setFont(wordFont2);pan2.add(button9);
   button10.setFont(wordFont2);pan2.add(button10);
   button11.setFont(wordFont2);pan2.add(button11);
   button12.setFont(wordFont2);pan2.add(button12);
   button13.setFont(wordFont2);pan2.add(button13);
   button14.setFont(wordFont2);pan2.add(button14);
   button15.setFont(wordFont2);pan2.add(button15);
   button16.setFont(wordFont2);pan2.add(button16);
   button17.setFont(wordFont2);pan2.add(button17);
   button18.setFont(wordFont2);pan2.add(button18);
   button19.setFont(wordFont2);pan2.add(button19);
   button20.setFont(wordFont2);pan2.add(button20);
  pan3.setLayout(new FlowLayout(FlowLayout.CENTER,2,2));
   Labelsay.setFont(wordFont1);
   Labelsay.setBackground(Color.blue);
   pan3.add(Labelsay);
   Labelnow.setFont(wordFont1);
   Labelnow.setBackground(Color.gray);
   pan3.add(Labelnow);
   Labeltime.setBackground(Color.gray);
   Labeltime.setFont(wordFont1);
   pan3.add(Labeltime);
  setLayout(new BorderLayout());
   add("North",pan1);
   add("Center",pan2);
   add("South",pan3);
  }


 public class windowcloser extends WindowAdapter{
   public void windowClosing(WindowEvent w){
     System.exit(0);
     }
  }

 public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==button18) 
      { Textshow.setEditable(true);
        Textshow.setText("");
         Labelnow.setBackground(Color.green);
        Labelnow.setText("请按标准的数学形式输入数字!");
       }
   else
     {
       if(e.getSource()==button20)
         { String QU=new String(Textshow.getText());
           System.out.println();System.out.println();
           System.out.println("即将计算的表达式是:"+QU);
           Labelnow.setBackground(Color.yellow);
           Labelnow.setText("计算程序正在运行");
           appendchar( button20.getLabel());
           appendchar(countall(QU));
           Textshow.setEditable(false);
           }
       else
	 { appendchar(e.getActionCommand()); }
     }
  }


 public void appendchar(String aa){
     StringBuffer tt=new StringBuffer(Textshow.getText().trim());
     tt.append(aa);
     Textshow.setText(new String(tt));
    }


 public String countall(String tt)
  {
   StringBuffer mm=new StringBuffer(tt);
   boolean errorstop=true;
   int i,j,m=0,n=0;
   for( ;m!=-1; )
   { m=-1; n=-2;
     for(i=0; i<mm.length(); i++)
      if(mm.charAt(i)=='(')  { m=i;  System.out.println("在"+m+"处找到'('"); }
    
      for(n=-1,j=m+1;j<mm.length();j++)
         if(mm.charAt(j)==')') { n=j; System.out.println("在"+n+"处找到')'"); break;}
    
     if(m<0&&n<0)  break;
     else
      { if(m*n<0||m>=n-1||m>0&&Iscountnum(mm.charAt(m-1))==0||n<mm.length()-1&&Iscountnum(mm.charAt(n+1))==0)
         { Labelnow.setBackground(Color.red);
           Labelnow.setText("小括号语法错误,请纠正!");
           System.out.println("发生小括号语法错误。");
           System.out.println(mm);
           mm.setLength(0);
           errorstop=false;
           break;
          } 
       else  
        { System.out.println("正在计算括号内的数据!"+mm.substring(m+1,n));
          mm.replace(m,n+1,counting(mm.substring(m+1,n)));
          System.out.println("经过括号计算后的字符串的值是:"+ mm);
           }
      }
   }
  if(errorstop)
    {
     System.out.println("正在进行无括号计算!");
     mm.replace(0,mm.length(),counting(mm.substring(0,mm.length())));     
     System.out.println("最终的结果为:"+mm);
    }
  return(mm.toString());
  }


 public String counting(String qq)
  {
   StringBuffer nn=new StringBuffer(qq);
   Double numgroup[]=new Double[20];
   numgroup[0]=Double.MIN_VALUE;
   StringBuffer result=new StringBuffer(Double.toString(numgroup[0]));
   Boolean cancounting0=true;
   Boolean cancounting1=true;
   Boolean cancounting2=true;
   Boolean cancounting3=true;
   Character countnum[]=new Character[20];
   int i,j,t=0;
  
   if(Iscountnum(nn.charAt(0))>2&&Iscountnum(nn.charAt(0))<7||Iscountnum(nn.charAt(nn.length()-1))<7&&Iscountnum(nn.charAt(nn.length()-1))>0) 
    { cancounting0=false;
      System.out.println("此部分的数据有问题 "+nn+"不可以进行计算啊");
      Labelnow.setBackground(Color.red);
      Labelnow.setText("请纠正数据后再按=键进行计算1");}

  if(cancounting0)
   { 
    for(j=2;j<nn.length();j++)
      { if(Iscountnum(nn.charAt(j-2))!=0&&Iscountnum(nn.charAt(j-1))!=0&&Iscountnum(nn.charAt(j))!=0)
           { cancounting1=false;
             System.out.println(nn);
             Labelnow.setBackground(Color.red);
             Labelnow.setText("请纠正数据运算符号后再按=键进行计算2"); }
        }
    for(i=0,j=1;j<nn.length();j++)
      {
       if(0<Iscountnum(nn.charAt(j-1))&&Iscountnum(nn.charAt(j-1))<6&&Iscountnum(nn.charAt(j))==0) 
             { i=j; 
               System.out.println(i);}
       if(nn.charAt(j)=='.'&&Iscountnum(nn.charAt(j-1))!=0||nn.charAt(j-1)=='.'&&Iscountnum(nn.charAt(j))!=0) 
              { cancounting2=false;
                System.out.println("此部分的数据小数有问题 "+nn+" 不可以进行计算啊");
                Labelnow.setBackground(Color.red);
                Labelnow.setText("请纠正数据小数的格式后再按=键进行计算3");
                break; }

       if(0<Iscountnum(nn.charAt(j-1))&&Iscountnum(nn.charAt(j-1))<6&&Iscountnum(nn.charAt(j))==1)
              { nn.deleteCharAt(j);
                System.out.println("检验数学符号没有问题"); 
                j=0; }
       else if(2<Iscountnum(nn.charAt(j-1))&&Iscountnum(nn.charAt(j-1))<6&&Iscountnum(nn.charAt(j))==2)   
              { nn.deleteCharAt(j);
                nn.insert(i,new Character('-'));
                System.out.println(nn);
                j=0; }
       else if(Iscountnum(nn.charAt(j-1))==1&&Iscountnum(nn.charAt(j))==2)
              {  nn.deleteCharAt(j-1);
                 System.out.println(nn);
                 j=0;}
       else if(Iscountnum(nn.charAt(j-1))==2&&Iscountnum(nn.charAt(j))==2)
                { nn.replace(j-1,j+1,new String("+"));
                  System.out.println(nn);
                  j=0;}
       else if(Iscountnum(nn.charAt(j-1))*Iscountnum(nn.charAt(j))!=0)
             {  cancounting3=false;
                System.out.println("此部分的数据运算符号有问题 "+nn+"不可以进行计算啊");
                Labelnow.setBackground(Color.red);
                Labelnow.setText("请纠正数据后再按=键进行计算4");
                break; }  
       }
     System.out.println("校对后的此部分的数学表达式是"+nn);
   } 

  if(cancounting0&&cancounting1&&cancounting2&&cancounting3) 
    {
     for(i=0,j=1;j<nn.length();j++)
      {
       if(Iscountnum(nn.charAt(j))!=0&&nn.charAt(j)!='.')
           {numgroup[t]=Double.parseDouble(nn.substring(i,j));
            countnum[t]=new Character(nn.charAt(j));
            System.out.println("表达式中的数字和计算符分别是"+numgroup[t]+"  ---------  "+countnum[t]);
            i=j+1;
 	    t++;}
       }	
     numgroup[t]=Double.parseDouble(nn.substring(i,j) );
     System.out.println("表达式最后一个数字和要计算的数字个数是"+numgroup[t]+"  ——————  "+(t+1));
  
    for(i=0;i<t;i++)
     if(2<Iscountnum(countnum[i])&&Iscountnum(countnum[i])<6)
       {switch(Iscountnum(countnum[i]))
 	 {case 3: numgroup[i]=numgroup[i]*numgroup[i+1];break;
	  case 4: numgroup[i]=numgroup[i]/numgroup[i+1];break;
	  case 5: numgroup[i]=numgroup[i]%numgroup[i+1];break;}
        for(j=i;j<t-1;j++)
         {numgroup[j+1]=numgroup[j+2];
	  countnum[j]=countnum[j+1];}
     if(i<t-1)
       numgroup[j+1]=numgroup[j+2];
       i--;
       t--;
      } 
   for(i=0;i<t;i++)
    if(0<Iscountnum(countnum[i])&&Iscountnum(countnum[i])<3)
      { switch(Iscountnum(countnum[i]))
 	 {case 1: numgroup[i]=numgroup[i]+numgroup[i+1];break;
	  case 2: numgroup[i]=numgroup[i]-numgroup[i+1];break;}
        for(j=i;j<t-1;j++)
         {numgroup[j+1]=numgroup[j+2];
	  countnum[j]=countnum[j+1];}
        if(i<t-1)
          numgroup[j+1]=numgroup[j+2];
         i--;
         t--;} 
    System.out.println("此部分的数计算结果是:"+numgroup[0]);
    Labelnow.setBackground(Color.cyan);
    Labelnow.setText("Ok! 此部分运行结束!"); 
    result=new StringBuffer(Double.toString(numgroup[0]));
   }
 if(numgroup[0]==Double.MIN_VALUE)
    { result.setLength(0);
      if(Labelnow.getText().equals("计算程序正在运行"))
         { System.out.println("程序发生了严重的错误,请联系管理员");
           Labelnow.setBackground(Color.red);
           Labelnow.setText("程序发生错误!请联系管理员");}
    }
     return(result.toString());
   //注意采用return(Double.toString(numgroup[0]))和return(numgroup[0].toString())的结果是不同的。而后者的精度更高。是为什么呢?
  }
 public int Iscountnum(Character hh)
  {
    String mm=new String("+-×÷%.()");
    int i,t=-1;
    for(i=0;i<mm.length();i++)
      if(mm.charAt(i)==hh)
        { t=i;break;}
      return(t+1);
   }  
 public static void main(String[] args){
     A5i13w at=new A5i13w();
     }
 }
  
//要解决的问题是如何使其支持负数的符号啊? 于2007-7-21成功解决啊 哈哈............  后续唉!!!!!!!!!!
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -