代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
简易计算器(无括号)
作者:
egoist
/ 发布于
2015/1/4
/
534
package 简易计算器; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class EasyCompute implements ActionListener{ private Frame f = new Frame("简易计算器"); final TextArea ta = new TextArea(4,40); private final Button[] button = new Button[17]; private final String[] buttonStr = {"1","2","3","+","4","5","6","-","7","8","9","*","0",".","=","/","c"}; String data = ""; /* * 用于记录操作前的数据 */ double upperNum = 0; /* * 用于记录非等号操作后的数据 */ double downNum = 0; /* * 用于记录等号操作后的数据 */ String equalData = ""; /* * 用于记录操作号 */ int operatorNum = -1; /* * 操作开关,防止空数据操作 */ boolean operatorLock = false; /* * 小数点计数器 */ boolean dotLock = true; /* * 数字操作的开关true可执行,false不可执行 * 防止结果数据修改输入 */ boolean numLock = true; /* * 界面实现方法 */ public void init() { // 设置显示器不可编辑 ta.setEditable(false); //显示器置于界面上部 f.add(ta,BorderLayout.NORTH); //新建按钮,添加监听器 for(int i=0;i<button.length;i++){ button[i] = new Button(buttonStr[i]); button[i].addActionListener(this); button[i].setActionCommand(button[i].getName()); } Panel p1 = new Panel(); for(int i=0; i<button.length-1;i++){ p1.add(button[i]); } p1.setLayout(new GridLayout(4,4,8,4)); f.add(p1); f.add(button[16],BorderLayout.EAST); f.setVisible(true); f.pack(); /* * 界面窗口关闭卡 */ f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); } /* * 主函数 */ public static void main(String[] args) { new EasyCompute().init(); } /* * (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub /* * 事件源 */ Button buttonE=(Button)e.getSource(); /* *数字键位0123456789 */ if(buttonE==button[0]||buttonE==button[1]||buttonE==button[2]|| buttonE==button[4]||buttonE==button[5]||buttonE==button[6]|| buttonE==button[8]||buttonE==button[9]||buttonE==button[10]|| buttonE==button[12]){ //检查数字按键是否lock,清屏&解锁 checkedNumLock(); //显示按键,连接对应的数字 display(buttonE); } /* *小数点实现与检查 */ if(buttonE == button[13]){ if(dotLock&&data!=""){ display(buttonE); dotLock = false; } } /* * + - * / 键位的处理 */ if(buttonE==button[3]||buttonE==button[7]|| buttonE==button[11]||buttonE==button[15]){ //实现前,结束前面的操作 if(data != ""){ checkedOperator(); resetLock(); ta.append("\n"); try{ if(equalData!=""){ upperNum = Double.parseDouble(equalData); } }catch(Exception ae){ System.out.println("ERROR!数据非法1"); } data = ""; ta.append(buttonLabel(buttonE)); operatorNum = buttonIndex(buttonE); ta.append("\n"); } } /* * =操作的处理 */ if(buttonE ==button[14]){ if(operatorNum != -1){ checkedOperator(); //未执行其他操作,输入数据后直接执行=操作 }else { if(data != ""){ equalData = data; operatorDisplay(buttonE); ta.append(String.valueOf(equalData)); resetDotLock(); resetData(); }else if (equalData!=""){ operatorDisplay(buttonE); ta.append(String.valueOf(equalData)); resetDotLock(); } } //等号之后,拒绝输入数据,lock数字键 numLock = false; } /* * c键位的实现,清屏。 */ if(buttonE == button[16]){ clearScreen(); } } /* * 返回button数组的index */ public int buttonIndex(Button b) { int index = -1; for(int k = 0;k<button.length;k++){ if(b == button[k]){ index = k; } } return index; } /* * 返回button的标签Label */ public String buttonLabel(Button b){ return buttonStr[buttonIndex(b)]; } /* * 操作按键对应方法 */ public double operator15(double upperNum,double downNum){ return upperNum / downNum; } public double operator11(double upperNum,double downNum){ return upperNum * downNum; } public double operator7(double upperNum,double downNum){ return upperNum - downNum; } public double operator3(double upperNum,double downNum){ return upperNum + downNum; } /* *操作函数实现 */ public double operator(int operatorNum){ switch(operatorNum) { case 15: return operator15(upperNum,downNum); case 11: return operator11(upperNum,downNum); case 7: return operator7(upperNum,downNum); case 3: return operator3(upperNum,downNum); default:return -99999999; } } /* * 检查数据操作方法是否已经执行 */ public void checkedOperator() { if(data == ""){operatorNum = -1;} if(operatorNum != -1&&data!=""){ try{ downNum = Double.parseDouble(data); }catch(Exception ae){ System.out.println("ERROR!数据非法2"); } equalData =String.valueOf(operator(operatorNum)); upperNum = Double.parseDouble(equalData); operatorNum = -1; resetData(); ta.append("\n"+"="+"\n"); ta.append(String.valueOf(equalData)); operatorNum = -1; } } /* * 按键的字符连接,以及文本框的显示 */ public void display(Button buttonE) { data += buttonLabel(buttonE); ta.append(buttonLabel(buttonE)); } /* * 操作键位的标签展示 */ public void operatorDisplay(Button buttonE) { ta.append("\n"+buttonLabel(buttonE)+"\n"); } /* * 小数点计数器重置,应当在执行一个操作后的开始输入新数据开始重置 */ public void resetDotLock() { dotLock =true; } /* * 数字按键锁unlock方法 */ public void resetNumLock(){ numLock = true; } /* * 数字键是否locked,如果是的话清屏&解锁 */ public void checkedNumLock() { if(!numLock){ clearScreen(); } resetNumLock(); } /* * 清屏,给出结果后,继续输入数字和非+-/*操作清屏,数据重置 */ public void clearScreen() { ta.setText(""); data = ""; upperNum = 0; downNum = 0; equalData = null; operatorNum = -1; dotLock = true; } /* * unlock全部锁 */ public void resetLock() { resetNumLock(); resetDotLock(); } /* * 数据记录器data清空,重新开始记录 */ public void resetData() { data = ""; } /* * 操作记录器Operator重置 */ public void resetOpNum() { operatorNum = -1; } /* * 操作开关的重置 */ private void resetOp() { operatorLock = false; } }
试试其它关键字
计算器
简易计算器
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
实现测量程序运行时间及cpu使用时间
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
egoist
贡献的其它代码
(
1
)
.
简易计算器(无括号)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3