一个Java实现的计算器小程序

/**
@author Song Liang Peng
@version 2005.7.23
*/
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[i]=new Button(String.valueOf(i));
  p1.add(b[i]);
  b[i].setActionCommand("number");
  b[i].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();
}
}

时间: 2024-08-03 13:53:36

一个Java实现的计算器小程序的相关文章

java-关于Java含有数据库的小程序打包问题

问题描述 关于Java含有数据库的小程序打包问题 我想把我用MyEclipse写的一个含有sqlsever数据库的Java小程序打包成jar包,然后放在桌面上可以双击打开,就像其他应用一样,但是我下载了sqlsever的驱动包,不知道如何把驱动包和程序一起打包成jar包,求好心大神帮助! 解决方案 http://blog.csdn.net/ljz2009y/article/details/7707237

Java版的QQ小程序

这是一个简单的java版的QQ小程序. 包括一个简单的服务器和一个简单的客户端. 运行时,先运行服务器,然后在运行客户端,就可以进行聊天了. 默认的配置是localhost,端口4545,更改ip就可以在两天电脑上进行聊天了. 目前不支持内网和外网之间的访问,也不支持多人聊天. 因为这只是一个简单的例子,感兴趣的同学可以通过改进,实现多人聊天和内外网之间的访问. 效果图: 下载地址:http://download.csdn.net/source/2958843 源代码: QQServer.jav

windows-想做一个可以帮助工作的小程序,但不知道怎么入手!

问题描述 想做一个可以帮助工作的小程序,但不知道怎么入手! 我想用C语言实现一个小工具,它可以把图纸上的数字识别出来,然后通过调用windows api 操作键盘和鼠标打开word软件然后把这个数字输入在word文档里,保存退出!不知道哪位大侠 可以给一些指点 解决方案 我见过,应该是先把图截取出来吧 解决方案二: 求助:想做一个sourcesafe的程序想做一个android程序 解决方案三: "图纸上的数字"?c能open文本文件.二进制文件,图像文件好像不行吧

求一个特别简单的安卓小程序 就是点击一个按钮就与IP127.0.0.1 端口8500建立连接

问题描述 求一个特别简单的安卓小程序 就是点击一个按钮就与IP127.0.0.1 端口8500建立连接 就是安卓的socket程序 能与只连接就行 主要我不懂线程有人说不能写到主线程里 解决方案 把网络耗时的操作放到Handler里面,新建线程操作. http://www.cnblogs.com/devinzhang/archive/2011/12/30/2306980.html 解决方案二: sockt()://建立套接字 connect()://连接 send()://发送 recv():/

Java简易登录注册小程序_java

登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. 功能介绍:简单的登录注册系统,使用了数据库sqlserver.单例模式.正则表达式以及图形化开发等知识. 1.在登录界面,可以登录或者注册用户. 注册用户界面,按照正则表达式规定的格式要求来输入信息,若有误,则重新输入. 2.点击注册,首先连接SQLserver数据库,连接成功则会判断该用户名是否已经存在,若存在,则给出提示.反之则进行注册. 3.登录界面,点击登录按钮时,首先与数据库

第一个delphi for php的小程序

今天化了一个小时写了一个小程序,我的delphi php的第一个程序.功能是在浏览器上显示一道简单的加法题,用户可以输入答案,电脑会告诉你正确或者错误,然后可以再来一题.功能很简单,主要为了熟悉delphi for php,写的时候,不时地查阅php帮助,发现这次codegear的php帮助做的还是不错的. 程序如下: //Includesrequire_once("vcl/vcl.inc.php");use_unit("forms.inc.php");use_un

一个有关随机函数rand()的小程序

随机函数rand()的小程序: #include<iostream> #include <time.h> #include <fstream> #include <windows.h> using namespace std; unsigned t[300],temp; void creat_rand() //产生随机数的函数 { long i=1; cout<<"为您产生的随机数如下:"<<endl; srand

java 音频播放-applet小程序已经启动了为什么音频播放不出来呢

问题描述 applet小程序已经启动了为什么音频播放不出来呢 是因为URL所指文件不能放在本地项目文件夹中吗在elise下拜托拜托,很急 解决方案 applet,,,老古董了 !

java源码-竞赛小程序,我不太会写,求大神教我

问题描述 竞赛小程序,我不太会写,求大神教我 这个题目不太会写,求大神教思路给源码?????????????????????????? 解决方案 http://blog.csdn.net/ocean20/article/details/5017538 解决方案二: 解决问题分步走: 1.判断是否为方阵,判断每行相邻数据是否有相等的,有即非方阵,判断行数据相等应该会不需提供代码: 2.判断是否标准反正,判断第一行相邻数据是否差值等于1,判断第一列相邻数据差值是否等于1,应该会不需提供代码.