展开全部

package example;

import java.awt.*;

import java.awt.event.*;

public class Calculator extends Frame {

/**

* 本实例实现功能如下 1.普通加减乘除运算 2.小数点的情况已经解32313133353236313431303231363533e58685e5aeb931333236393738决 3.开始按0已经解决 4.消去键可以起作用

*

*/

private static final long serialVersionUID = 1L;

private String name[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",

".", "=", "+", "-", "*", "/", "Backspace", "", "", "C" };

private Button button[] = new Button[name.length];

private TextField textfield = new TextField("0.");

// 设置2个字符A1,A2用于存放点击运算符号之前的String数据

private String A1 = null, A2 = null;

// 设置2个字符B1,B2用于存放点击运算符号之后的String数据

private String B1 = null, B2 = null;

// 存放运算符号前后的数据,douuble类型进行运算

private double A, B;

// s存放为哪种运算符号,Result存放最后的运行结果

private String Result="0", s;

// 判断这个数字是否为小数,小数的时为true不是时为false

private boolean Decimal=false;

// 构造器,显示在标题栏

public Calculator() {

super("TEST:Caculator");

}

// 计算器的基本布局,在一个BorderLayout上面放置了一个GridLayout一个BorderLayout

public void init() {

setLayout(new BorderLayout(2, 2));

// 设置2个Panel

Panel p0 = new Panel();

Panel p1 = new Panel();

// p0上添加所有按扭

p0.setLayout(new GridLayout(5, 4, 1, 1));

// 不同的按扭采用不同的监听事件0-9和"."采用ButtonListener()

for (int i = 0; i < 11; i++) {

button = new Button(name);

// 设置字体颜色为蓝色

button.setForeground(Color.blue);

p0.add(button);

button.addActionListener(new ButtonListener());

}

// 其余的运算符号采取ButtonListener2()另一监听事件

for (int i = 11; i < name.length; i++) {

button = new Button(name);

// 设置字体颜色为红色

button.setForeground(Color.RED);

p0.add(button);

button.addActionListener(new ButtonListener2());

}

// 设置中间2个按扭不可见,增加美观,对称

button[17].setVisible(false);

button[18].setVisible(false);

// p1上添加文本输出区域

p1.setLayout(new BorderLayout(5, 5));

p1.add(textfield);

// 不可以向文本框里随便写东西

textfield.setEditable(false);

// 设置文本框背景为白色

textfield.setBackground(Color.WHITE);

add(p0, BorderLayout.SOUTH);

add(p1, BorderLayout.NORTH);

pack();

// 设置打开窗口在显示器的中间显示

setLocationRelativeTo(null);

// 关闭按扭,适配器模式

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

// 调整可见

setVisible(true);

}

public class ButtonListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

System.out.print(e.getActionCommand() + " ");

// 当A2和B2同时为null时候表示程序第一次运行或者开始一次新的运行,即按"="之后,将按键获取的值赋给A2--setp1

if (A2 == null && B2 == null) {

// 所按的数字按扭不是"0"的时候对A2进行赋值,否则给A2值不变,但是让textfield恢复初始值"0."

if (!"0".equals(e.getActionCommand())) {

// 考虑第一次按小数点的情况,按小数点后将boolean类型的Decimal定义为true

if (".".equals(e.getActionCommand())) {

A2 = "0.";

Decimal = true;

textfield.setText(A2);

} else {

A2 = e.getActionCommand();

textfield.setText(A2);

}

} else {

if ("0".equals(e.getActionCommand())) {

} else {

A2 = e.getActionCommand();

textfield.setText("0");

}

}

// 当A2不等于null,B2和A为null,表示还没有按运算符号,仍然对A2进行赋值

} else if (A2 != null && A1 == null && B2 == null) {

// 已经是小数的在点小数点不做任何动作,不是小数的在按"."的时候追加赋值并且设置Decimal为true

if (".".equals(e.getActionCommand())) {

if (Decimal) {

} else {

Decimal = true;

A2 += e.getActionCommand();

textfield.setText(A2);

}

} else {

A2 += e.getActionCommand();

textfield.setText(A2);

}

// 当A,A2不等于null,B2为null,表示刚按过运算符号,开始对B2进行赋值

// 仍要考虑"0"的情况,但要考虑0做为被减数,乘数和加数,此处B2可以等于0

// B2也可以是小数将Decimal设置回false

} else if (A2 != null && A1 != null && B2 == null) {

Decimal = false;

if (!"0".equals(e.getActionCommand())) {

// 不为"0"但为"."的情况,原理同上

if (".".equals(e.getActionCommand())) {

Decimal = true;

if (Decimal) {

B2 = "0.";

} else {

Decimal = true;

B2 = e.getActionCommand();

textfield.setText(B2);

}

} else {

B2 = e.getActionCommand();

textfield.setText(B2);

}

} else {

B2 = "0";

textfield.setText(B2);

}

// 当A,A2,B2都不为null的时候表示B2已经被赋值,继续按数字按扭对B2继续赋值

// 当B2等于0的时候不进行追加直接赋值,仅当B2不等于0的时候才进行追加

} else if (A2 != null && A1 != null && B2 != null) {

if ("0".equals(B2)) {

// 考虑用户连续2次按"0"的情况

if ("0".equals(e.getActionCommand())) {

B2 = "0";

textfield.setText(B2);

} else {

B2 = e.getActionCommand();

textfield.setText(B2);

}

} else {

// 不为"0"但为"."的情况,原理同上

if (".".equals(e.getActionCommand())) {

if (Decimal) {

} else {

Decimal = true;

B2 += e.getActionCommand();

textfield.setText(B2);

}

} else {

B2 += e.getActionCommand();

textfield.setText(B2);

}

}

}

}

}

public class ButtonListener2 implements ActionListener {

public void actionPerformed(ActionEvent e) {

System.out.print(e.getActionCommand() + " ");

// 一旦按了运算符号"+-*/"A2赋值给A,使得A和A2都不为null,但此时B2还为null在按数字键的时候便会给B2赋值

// 给s--运算符号赋值

if ("+".equals(e.getActionCommand())) {

if (A2 == null) {

A2 = "0";

}

A1 = A2;

s = "+";

} else if ("-".equals(e.getActionCommand())) {

if (A2 == null) {

A2 = "0";

}

A1 = A2;

s = "-";

} else if ("*".equals(e.getActionCommand())) {

if (A2 == null) {

A2 = "0";

}

A1 = A2;

s = "*";

} else if ("/".equals(e.getActionCommand())) {

if (A2 == null) {

A2 = "0";

}

A1 = A2;

s = "/";

// 等号的时候把B2赋值给B,进行最后的运算

} else if ("=".equals(e.getActionCommand())) {

if (A2 == null) {

A2 = "0";

}

if (B2 == null) {

B2 = "0";

}

A1 = A2;

B1 = B2;

// 将String类型转换为double进行运算

A = Double.parseDouble(A1);

B = Double.parseDouble(B1);

if ("+".equals(s)) {

Result = String.valueOf(A + B);

System.out.println();

System.out.println(A + "+" + B + "=" + Result);

} else if ("-".equals(s)) {

Result = String.valueOf(A - B);

System.out.println();

System.out.println(A + "-" + B + "=" + Result);

} else if ("*".equals(s)) {

Result = String.valueOf(A * B);

System.out.println();

System.out.println(A + "*" + B + "=" + Result);

}

textfield.setText(Result);

A1 = null;

A2 = null;

B1 = null;

B2 = null;

Decimal=false;

} else if ("Backspace".equals(e.getActionCommand())) {

String text = "0";

if (A2 == null && A1 == null) {

} else if (A2 != null && A1 == null && B2 == null) {

int t = A2.length();

text = A2;

if (t == 1) {

text = "0";

} else {

text = text.substring(0, t - 1);

}

A2 = text;

} else if (A2 != null && A1 != null && B2 == null) {

} else {

int t = B2.length();

text = B2;

if (t == 1) {

text = "0";

} else {

text = text.substring(0, t - 1);

}

B2 = text;

}

textfield.setText(text);

System.out.println();

System.out.println("text=" + text + " ");

System.out.println(A1 + ":" + A2 + ":" + B1 + ":" + B2);

// 选择"C"的时候将计算器重置,即恢复到开始的状态

} else if ("C".equals(e.getActionCommand())) {

textfield.setText("0.");

A1 = null;

A2 = null;

B1 = null;

B2 = null;

Decimal=false;

}

}

}

public static void main(String[] args) {

Calculator calculator = new Calculator();

calculator.init();

}

}

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java计算器流程图_帮帮忙:Java小计算器代码,及需求分析.流程图.相关推荐

  1. java qq号码生成规则_只需亿小串代码,教你用java仿制qq

    只需亿小串代码,教你用java仿制qq 直奔主题,代码如下: import java.awt.Color; import java.awt.Container; import java.awt.Ima ...

  2. java设计模式并发_[高并发Java 七] 并发设计模式

    [高并发Java 七] 并发设计模式 [高并发Java 七] 并发设计模式 为什么80%的码农都做不了架构师?>>> 在软件工程中,设计模式(design pattern)是对软件设 ...

  3. 达内java编程 学费_东莞达内Java开发课程学费多少

    众所周知,从编程语言列表开始学习Java是非常困难的.除了科学地选择一种适合自己的编程语言之外,还有入门的方法吗?下面就来说说入门学习java的方法. 学习语言基础 显然,掌握语言基础是步.如果你不知 ...

  4. java 02-cf_cf活动如何设置java环境变量_如何设置java环境变量

    cf助手怎么连接wifi_连接无线网设置 对于刚刚学习java的win7用户来说,首先要学会安装jdk和配置java环境变量,这是学习java的唯一途径,否则编写的代码运行时会出现bug.关于这一点, ...

  5. 哈尔滨java开发工资_给哈尔滨Java开发初学者的几个学习建议

    对于初学者应该如何学习Java开发技术,纵观中国目前整体行业来说,互联网IT行业成为了拔尖的行业,IT互联网程序开发成了靠自己能力可以多挣一点钱,所以各个行业都在转行,其实互联网不存在饱和,只不过大多 ...

  6. java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...

    面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...

  7. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  8. java for循环_愉快地学Java语言:第五章 循环

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  9. java在线编译器_什么是Java内存模型

    在知识星球中,有个小伙伴提了一个问题:有一个关于JVM名词定义的问题,说"JVM内存模型",有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机 ...

最新文章

  1. BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )
  2. 一行代码实现数据类型判断
  3. AS整理代码快捷键 ctl+alt+L
  4. vue组件通信之父组件主动获取子组件数据和方法
  5. linux命令(51):set 指定行,直接替换并修改文件
  6. 订单分类和评分--vue.js学习笔记2
  7. 20分钟吃掉Linux常用命令40式
  8. 图像卷积和图像滤波的一些知识
  9. 全景图解高铁数据,谁是最有潜力的高铁城市?
  10. RTSP播放器开发填坑之道
  11. 《java入门第一季》之java语法部分小案例
  12. 获取checkbox后面的文本内容
  13. 微信小程序下载文件到本地
  14. RNN学习:利用LSTM,GRU层解决航空公司评论数据预测问题
  15. 请领导过目文件怎么说_职场干货|领导说“辛苦了”该怎么回?
  16. 关于论坛数据库的设计
  17. 电脑误删的文件怎么恢复?分享90%的人都会的这2招
  18. 记录ubuntu16.04使用kinectv2报错openni2_grabber.cpp @ 325 : No devices connected.找不到设备的解决过程
  19. iphone android短信中心号码,iPhone设置短信中心号码失败
  20. 通过Docker创建CentOS容器

热门文章

  1. python assert 与 slice
  2. 浅谈基于TCP和UDP的协议设计
  3. C++学习之路 | PTA乙级—— 1051 复数乘法 (15 分)(精简)
  4. 1090 Highest Price in Supply Chain(甲级)
  5. connectionstring mysql_Entity Framework 6 自定义连接字符串ConnectionString连接MySQL
  6. php mysql 胚子_php mysql数据库连接浅识
  7. php curl跨域cookie_php使用curl带cookie访问一直失败求助
  8. Modbus协议栈开发笔记之四:Modbus TCP Client开发
  9. matlab函数输出,优化求解器输出函数
  10. 共阴极数码管编码表_数码管循环点亮的PLC控制——基本逻辑指令的应用