游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1508|回复: 0

计算器小程序wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2005-7-27 22:30:00 | 显示全部楼层 |阅读模式

import java.awt.*;
import java.awt.event.*;




public class Counter extends Frame implements ActionListener
{



TextField t=new TextField("",15);
Panel p1=new Panel();
Panel p2=new Panel();
Button[] b=new Button[10];
Button bAdd=new Button("+");
Button bSub=new Button("-");
Button bMul=new Button("*");
Button bDiv=new Button("/");
Button bPoint=new Button(".");
Button bEqual=new Button("=");
Button bSqrt=new Button("开平方");
Button bNull=new Button("清空");



String str1="";     //str1和str2存放两个输入的数
String str2="";
String operator=null;   //存放加减乘除以及开平方的符号
boolean first=true;    //检验输入的是否为第一个数
int countOper=0;    //累计输入符号的个数,连加连减等操作中会用到
double result=0.0;    //暂存结果
double num1=0.0,num2=0.0;  //两个输入的数做运算时转化为double存放
boolean error=false;   //检验除数是否为0



//构造方法
public Counter()
{
  super("counter");
  t.setEditable(false);



  for(int i=0;i<b.length;i++)
  {
   b=new Button(String.valueOf(i));
   p1.add(b);
   b.setActionCommand("number");
   b.addActionListener(this);
  }
  p1.add(bPoint);
  bPoint.setActionCommand("number");
  p1.add(bAdd);      //数字键,符号键放置在panel的p1中
  p1.add(bSub);
  p1.add(bMul);
  p1.add(bDiv);
  p1.add(bEqual);
  p2.add(bSqrt);      //开平方和清空键放置在panel的p2中
  p2.add(bNull);
  bAdd.setActionCommand("oper");
  bSub.setActionCommand("oper");
  bMul.setActionCommand("oper");
  bDiv.setActionCommand("oper");



  bAdd.addActionListener(this);
  bSub.addActionListener(this);
  bMul.addActionListener(this);
  bDiv.addActionListener(this);
  bPoint.addActionListener(this);
  bEqual.addActionListener(this);
  bSqrt.addActionListener(this);
  bNull.addActionListener(this);



  p1.setLayout(new GridLayout(4,4,5,5));
  p2.setLayout(new FlowLayout());
  add(t,"North");      //frame的north放置输入框,panel放置在center和south
  add(p1,"Center");
  add(p2,"South");
  setLocation(400,200);
  setSize(200,200);
  setBackground(Color.red);
  setVisible(true);



  addWindowListener(new WindowAdapter(){   //关闭窗口
   public void windowClosing(WindowEvent e)
   {
    System.exit(0);
   }
  });
}



//实现接口ActionListener
public void actionPerformed(ActionEvent e)
{
  Button temp=(Button)e.getSource();



  if(e.getActionCommand().equals("number"))
  {
   if(first)
   {
    str1=str1+temp.getLabel();
    t.setText(str1);
   }
   else
   {
    str2=str2+temp.getLabel();
    t.setText(str2);
   }
  }
  else if(e.getActionCommand().equals("oper"))
  {
   if(str1=="")    //如果还没有输入数就点击运算符执行if,127行同理
   {
    countOper=0;
    first=true;
   }
   else
   {
    countOper++;
    if(countOper>1)
    {
     getResult();
    }
    operator=temp.getLabel();
    first=false;
   }
  }
  else if(e.getActionCommand().equals("开平方"))
  {
   if(str1=="")
   {
    countOper=0;
    first=true;
   }
   else
   {
    countOper=1;
    if(countOper>1)
    {
     getResult();
    }
    double d=Math.sqrt(Double.parseDouble(str1));
    str1=String.valueOf(d);
    t.setText(String.valueOf(d));
    first=false;
   }  
  }
  else if(e.getActionCommand().equals("清空"))
  {
   str1="";
   str2="";
   t.setText("");
   countOper=0;
   first=true;
   error=false;
  }
  else if(e.getActionCommand().equals("="))
  {
   if((str1=="")||(str2==""))   //两个数没有输全就点击等号,执行if
   {
    countOper=0;
    first=true;
   }
   else
   {
    getResult();
    countOper=0;
   }
  }
}



//运算结果的方法
public void getResult()
{
  num1=Double.parseDouble(str1);
  num2=Double.parseDouble(str2);



  if(operator.equals("+"))
  {
   result=num1+num2;
  }
  else if(operator.equals("-"))
  {
   result=num1-num2;
  }
  else if(operator.equals("*"))
  {
   result=num1*num2;
  }
  else if(operator.equals("/"))
  {
   if(num2==0.0)    //除数为0的处理方法
   {
    error=true;
   }
   else
   {
    result=num1/num2;
   }
  }




  if(error)
  {
   t.setText("error");
  }
  else
  {
   t.setText(String.valueOf(result));
   str1=String.valueOf(result);  //运算后把结果放入str1中,str2清空,为连加连减等操作做准备
   str2="";
  }
}



//主方法
public static void main(String[] args)
{
  new Counter();
}
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 15:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表