A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionPane;
public class test {
static String s1="",s2="";//第一个运算数和第二个运算数
static TextField tf=new TextField(30);
static boolean flag=false;//是否满足运算条件
static String op="";

public static void main(String[] args){
  Frame f=new Frame("java计算器 by紫色");
  Panel p1=new Panel();
  Panel p2=new Panel();
  p1.add(tf);

  f.add(p1,BorderLayout.NORTH);
  p2.setLayout(new GridLayout(3,5,4,4));//按钮布局

  String[] name={"0","1","2","3","4","5","6","7","8","9",".","+","-","*","/","√","AC","="};//计算器按钮
  for(int i=0;i<name.length;i++){
   final Button b=new Button(name[i]);//添加按钮
   p2.add(b);

   if(i<11)//按下数字符号
   {b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    if(!flag){//取第一个数值
     s1+=b.getLabel();
     tf.setText(s1);
    }
    else{//取第二个数值
     s2+=b.getLabel();
     tf.setText(s2);
     }

  }
   });}
   else if(i==name.length-2){//按下清除符号
    b.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
      s1="";s2="";
      flag=false;
      tf.setText("0");
     }
    });
   }
   else if(i==name.length-3){//按下根号
    b.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
      double d=Double.parseDouble(s1);
      s1=String.valueOf(Math.sqrt(d));
      tf.setText(s1);
     }
    });
   }
   else if(i==name.length-1){//按下等号
    b.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
       if(s2=="");
       else{
       flag=false;
       double d1,d2;
       d1=Double.parseDouble(s1);//将字符转换为数字类型计算,计算完后转换为字符型输出
       d2=Double.parseDouble(s2);
       s2="";//reset the s2
       switch(op){//运算
       case "+":s1=String.valueOf(d1+d2);//String.valueOf(d1+d2)将d1+d2的结果转换为字符
         tf.setText(s1);
         break;

       case "-":s1=String.valueOf(d1-d2);
          tf.setText(s1);
          break;

       case "*":s1=String.valueOf(d1*d2);
         tf.setText(s1);
         break;

       case "/":if(d2==0)JOptionPane.showMessageDialog
         (null, "除数不能为0,非法运算", "错误", JOptionPane.ERROR_MESSAGE);
         else {
          s1=String.valueOf(d1/d2);
          tf.setText(s1);
          break;
         }
       default:break;
      }

     }}
    });
   }

   else{//按下运算符
    b.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
      op=b.getLabel();
      flag=true;
     }
    });

   }
  }

  f.add(p2);
  f.pack();
  f.setVisible(true);
  }
}

6 个回复

正序浏览
赞一个~
回复 使用道具 举报
还没学完,学完自己也写一个试试。。。
回复 使用道具 举报
鬼魅_vYpyK 发表于 2015-12-9 22:48
恩,不错哦!看好你哦!

哈哈
回复 使用道具 举报
恩,不错哦!看好你哦!
回复 使用道具 举报
不错不错  顶一下~
回复 使用道具 举报
不过有一个弊端就是没有写退出,点关闭键是关不掉的!大神可以加上
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马