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

展开全部

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();

}

}

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 5.6.22编译_saltstack全编译安装mysql5.6.22

关闭selinux和firewalld&#xff0c;iptables开放4505和4506端口目的&#xff1a;通过salt-master实现对salt-minion的批量自动安装mysql步骤(都在master执行)&#xff1a;1&#xff0c;检测连通性salt ‘*‘ test.ping2&#xff0c;下载mysql的源码包至/srv/salt/mysql/files/…

java 邮件跟踪_如何跟踪邮件已读状态(Java)

>图片的展示形式&#xff1a;html中图片元素表示&#xff1a;其中src部分是比较好玩的&#xff0c;我们可以用图片服务器链接地址&#xff0c;例如&#xff1a;我们也可以使用base64的图片字符串&#xff0c;例如&#xff1a;>利用图片加载来跟踪用户打开邮件状态&#x…

vs2012 entity framework mysql_MVC4,MVC3,VS2012+ entity framework Migration from Sqlserver

在开发的初期个人认为因VS与Sqlserver的配合很默契&#xff0c;即可以方便的实现Code First&#xff0c;又可以使用SqlServer Manager很漂亮的进行建模与变更&#xff0c;也许是个人的使用习惯MS的界面做的很好&#xff0c;乎开源的产品美感上都追不上商用版。 所以个人比较喜欢…

用java做一个截图工具_Java制作屏幕截图软件(还可以保存到剪切板内)

原标题&#xff1a;Java制作屏幕截图软件(还可以保存到剪切板内)package com.kaige123;import java.awt.Rectangle;import java.awt.Robot;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedIm…

java c语言 for_Java能写C语言编译器吗

用java是可以写语言编译器的&#xff0c;用任何语言工具写都可以。各语言开发工具间只有开发效率的差异&#xff0c;没有可行不可行的区别。编译器其实就是一个翻译工具&#xff0c;它可以把代码直接翻译成二进制文件交给CPU执行(二进制指令就是CPU的指令集&#xff0c;当然可以…

手机 java服务器ip地址_java获取系统当前服务器IP地址

BZOJ-1008 越狱 数论快速幂1008: [HNOI2008]越狱 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 6192 Solved: 2636 [Submit][Status] ...VBScript - CUD registry key and valuehttp://msdn.microsoft.com/en-us/library/aa384906(vvs.85).aspx HKEY_LOCAL_MACHINE &H…

linux定时结束java进程_使用zt-exec库定时清理linux休眠进程

在几个月前上线的一个采集项目&#xff0c;构架是基于java selenium chromedriver chrome实现的采集。至于为哈不直接用jsoup或httpclient实现采集功能&#xff0c;是因为很多被采集页面都是通过js来渲染内容的&#xff0c;所以必须用webdriverchrome来模拟真正的浏览器访问…

java的流传输的进度条_JAVA程序设计(17)----- 制作文件拷贝软件 进程 输入流输出流 NIO 进度条 底层拷贝 多线程...

使用NIO对文件进行底层拷贝(按照字节)多线程技术初级应用 不阻塞程序运行package com.lovo.homework01;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOu…

java 安卓调试_【转】Android 调试技术

一、JAVA层单步调试二、Native层单步调试三、JAVA层堆栈打印1. 在指定的函数内打印相关java调用 Log.d(TAG,Log.getStackTraceString(new Throwable()));2. 普通JAVA进程堆栈 ActivityManagerService.dumpStackTraces保存在系统设置dalvik.vm.stack-trace-file指定的文件data/a…

java spring4 jar包_spring jar包官方下载|

spring-web jar包是用来SSH配置的jar包 配置了监听器&#xff0c;还出现严重: Error configuring application listener of class org.springframework.web.context.ContextLoader就需要它&#xff0c;欢迎有需要的用户前来it猫扑下载&#xff01;spring-web.jar作用spring-web…

java 找不到符号 con_我的java程序运行时,提示找不到符号,求解!

我的java程序运行时&#xff0c;提示找不到符号&#xff0c;求解!关注:163 答案:4 mip版解决时间 2021-02-07 23:57提问者人潮拥挤你不在2021-02-06 23:57import java.awt.*;import java.awt.event.*;import java.applet.Applet;import java.applet.AudioClip;public class M…

java字符串为空抛出异常_Java 判断字符串是否为空的四种方法,及效率比较。

以下是Java 判断字符串是否为空的四种方法:方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低:if(s null ||"".equals(s));方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法:if(s null || s.length() < 0);方法三: Java SE 6.0 才开始提供的方法, …

java抽组件_Java实现的基于模板的网页结构化信息精准抽取组件:HtmlExtractor

HtmlExtractor由2个子项目构成&#xff0c;html-extractor和html-extractor-web。html-extractor实现了数据抽取逻辑&#xff0c;是从节点&#xff0c;html-extractor-web提供web界面来维护抽取规则&#xff0c;是主节点。html-extractor是一个jar包&#xff0c;可通过maven引用…

mysql索引过多为什么会慢_mysql – 为什么索引使这个查询更慢?

摘要问题是由于b-trees的性质,字段不适合索引.说明假设你有一张表有500,000个掷硬币的结果,其中抛掷是1(头)或0(尾)&#xff1a;CREATE TABLE toss (id int NOT NULL AUTO_INCREMENT,result int NOT NULL DEFAULT 0,PRIMARY KEY ( id ))select result, count(*) from toss grou…

pythonweb管理电脑_Python远程控制局域网计算机网络远程控制软件Python的开发,python,电脑,web...

[Python] 纯文本查看 复制代码import web import osimport timefrom PIL import ImageGrabimport numpy as npimport cv2urls (/reboot_html/(.*), reboot_html,/jp_html/(.*), jp_html,/shutdown_html/(.*), shutdown_html,/(js|css|images)/(.*), static)app web.applicati…

ctf的php,CTF中常见的PHP漏洞

1.MD5()漏洞php在处理字符串时会利用&#xff01;&#xff0c;||&#xff0c;进行hash值的比较 他把每一个“0E’开头的哈希值都解释为0&#xff0c;因此如果两个不同的密码经过hash处理之后都是以‘0e’开头&#xff0c;那么PHP会认为两者是相同的&#xff0c;南京邮电大学一次…

php ob 缓存,php中ob函数缓冲机制深入理解

下面就php中ob函数缓冲机制通过文字说明加代码分析的形式给大家展示如下&#xff1a;对于一个刚刚入门的php程序员来说&#xff0c;php缓冲区是几乎透明的。在他们心目中&#xff0c;一个echo print_r 函数&#xff0c;数据便会‘嗖的一声飞到浏览器上&#xff0c;显示出来。我…

php极光推送教程,laravel框架使用极光推送消息操作示例

本文实例讲述了laravel框架使用极光推送消息。分享给大家供大家参考&#xff0c;具体如下&#xff1a;最近需要使用极光推送往客户端推消息&#xff0c;所以这里记录下使用过程。极光推送的服务端文档&#xff1a;https://docs.jiguang.cn/jpush/server/push/server_overview/极…

php 强制刷新,web端实现后退强制刷新功能代码

本文主要和大家介绍了微信web端后退强制刷新功能的实现代码,需要的朋友可以参考下&#xff0c;希望能帮助到大家。具体代码如下所示&#xff1a;//生成uuidvar uuidChars "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");fu…

php强制cookies,php Cookies操作类(附源码)

本cookies操作类的功能&#xff0c;包括&#xff1a;1&#xff0c;保存&#xff0c;读取&#xff0c;更新&#xff0c;清除cookies数据。2&#xff0c;可设置前缀。3&#xff0c;强制超时控制。4&#xff0c;cookies数据可以是字符串&#xff0c;数组&#xff0c;对象等。1&…