没有合适的资源?快使用搜索试试~ 我知道了~
首页Java实战:入门五子棋与基础编程训练
Java实战:入门五子棋与基础编程训练
需积分: 10 3 下载量 18 浏览量
更新于2024-07-27
收藏 13.03MB PDF 举报
"《疯狂java实战演义》是一本专为Java初学者设计的实战教程,通过具体的项目实例——控制台五子棋,引导读者深入理解和掌握Java编程基础知识。该书第一章以控制台五子棋作为入门案例,强调了程序核心在于业务逻辑和数据处理能力,而非界面设计。五子棋是一种源自中国的传统棋类游戏,规则简单明了:两名玩家轮流落子,形成五子连线者获胜,没有和棋。 在这个过程中,作者首先介绍了五子棋的基本概念,包括起源、常用名称和基本玩法,如黑先白后,棋盘规格(15x15),以及胜负条件。实战部分则让读者亲手操作,通过控制台交互,模拟对战或与一个简单的“电脑”对手对弈,从而学习如何读取用户输入(坐标x和y)并在棋盘上落子。 本书利用控制台五子棋的实现,不仅让读者了解基础的Java编程语法和逻辑结构,还为后续章节学习AWT和Swing等图形用户界面(GUI)技术打下坚实基础。作者鼓励读者在此基础上进一步挑战,尝试开发具有“人工智能”的电脑对手,提升自己的编程技能和解决问题的能力。通过这一章的学习,读者将对Java编程有一个全面且实用的认识,为后续的编程实践打下坚实基础。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/4850034/bg10.jpg)
第 2 章 仿 Windows 计算器
第 2 章 仿Windows计算器
2.1 仿Windows计算器概述
Windows 计算器,是 Windows 操作系统自带计算器,,可以帮助用户完成数据的运算,它可分为“标
准型”和“科学型”,本章的仿 Windows 计算器是标准型的 Java 实现,标准型 Windows 计算器实现的
主要功能有:四则运算;求倒数;求开方;存储计算结果;读取计算结果;累积计算结果。
我们在第一章中,我们实现了一个在控制台进行的五子棋游戏,我们从本章开始将在 Swing 界面中
实现本书的项目。在本章中,我们将使用到 JFrame 和 JPanel 两个 Swing 容器,使用到 JTextField 和
JButton 两个 Swing 容器,使用 BorderLayout 和 GridLayout 做两个布局器,以及使用到事件、事件监
听器和事件适配器等。
实现一个计算器,界面中需要提供各种输入的按钮,再以这些按钮组成计算器的键盘,用户点击键
盘输入值后,就可以将其所输入的值显示到一个文本框中,运算后,再将结果显示到文本框中。计算器
的最终效果如图 2.1 所示。
图 2.1 用 Swing 制作的计算器
从图 2.1 中可以看到,我们开发界面的时候,需要提供一个文本框在窗口的最上部,文本框下面再
提供各个计算器的按钮。
2.1.1 数学与其它符号介绍
在此计算器中,主要使用的数学运算有加、减、乘、除四则运算,或者对一个正数进行开方,或者
对一个非 0 的数学求倒数,使用到的数学符号有:
加、减、乘、除,对应使用的符号是“+”、“-”、“*”、“/”。
开方与倒数,对应使用的符号是“sqrt”和“1/x”。
求结果使用的数学符号是“=”。
![](https://csdnimg.cn/release/download_crawler_static/4850034/bg11.jpg)
第 2 章 仿 Windows 计算器
·2·
“%”号,如果使用此符号,第二个操作数就等于两数相乘再除以 100。
除了用于数学运算的符号,Windows 计算器还提供对计算结果做存储、读取、累加、清除等操作,
亦有对数字显示框中的数字做退格操作,还可以清除上次计算结果或者全部结果:
使用符号“MC”、“MR”、“MS”、“M+”代表清除存储结果、读取存储结果、保存存储
结果和累加存储结果。
使用“Backspace”符号代表退格。
使用“CE”和“C”代表清除上次计算结果和清除所有计算结果。
四则运算在程序中可以直接使用 Java 运算符实现,实现开方可以调用 Math 类的 sqrt 方法,倒数
可以使用 1 来除以原始的数字。当用户需点击“=”的时候,计算器就需要将最终的计算结果显示到文
本框中。其他的计算器功能都可以通过计算器内部的程序实现,例如使用某个字符串或者数字来保存相
应的结果,如果需要计取、存储、累加或者清除结果,可以通过改变或者读取我们所保存的值来实现。
2.1.2 界面说明
界面中使用的 Swing 组件相对简单,整个大窗口可以看作一个 JFrame 对象,在 JFrame 对象中,
存放一个 JPanel 对象,我们需要为这个 JPanel 对象进行布局,将文本框(JTextField 对象)与各个计
算器按钮(JButton 对象)添加到这个 JPanel 中。在添加计算器按钮的时候,我们可以使用 GridLayout
布局处理器来进行网格状布局,由于各个计算器按钮都是以网格状分布在界面中的,因此使用
GridLayout 非常适合。本章计算器的界面布局并不复杂,因此在这里不再详细描述。
2.2 流程描述
用户打开计算器后,在没有关闭计算器之前,可以通过鼠标点击“1”到“9”数字键和点击“+”、
“-”、“*”、“/”键去输入要运算结果的算术式,再通过点击“=”、“sqrt”、“1/x”等键去直接获取计算
结果,除外,还可以点击“MC”、“MR”、“MS”、“M+”键去清除、读取、保存、累加计算显示框中显
示的数字,还有清除上次结果、清除所有结果、退格等操作。从图 2.2 中可以看出,计算器打开之后,
就开始监听用户的鼠标动作,如果输入是关于计算结果或者“MC”、“MR”、“MS”、“M+”、“Backspace”、
“CE”、“C”等操作指令,而且没有关闭计算器,就返回计算结果并显示,如果不是,则不计算结果。
接下来再继续等待用户的输入。
本章的计算器并没有复杂的流程,只需要简单的操作,返回计算结果等。在实现计算器的过程中,
我们需要注意的是,例如已经点击了某个数字,再点击运算符,那么程序需要记录之前选点击的数字,
当用户再次点击运算符(非“=”)时,系统就需要将结果显示到文本框中。因此在开发计算器的时候,
我们需要注意用户点击的具体顺序。
![](https://csdnimg.cn/release/download_crawler_static/4850034/bg12.jpg)
第 2 章 仿 Windows 计算器
·3·
图 2.2 计算流程
2.3 建立计算器对象
实现一个计算器,我们需要建立一系列的对象来实现,例如,计算界面我们要建立一个界面类,还
需要建立一个专门负责处理加、减、乘、除的基本计算类,还需要一个负责处理计算功能的业务类。本
小节中只讲解创建这三个基本的类,如果在开发的过程发现可以将一些行为或者属性放置到一个新的对
象中,那么可以再建立这些对象来完成需要实现的功能或者操作。
本章主要设计四个类来完成计算器的功能,界面类(CalFrame)—主要用来显示计算器界面,功
能类(CalService)—主要用于完成计算器中的逻辑功能,计算工具类(MyMath)—此类是工具类,
用于处理大型数字的加减乘除,计算器类(Cal)—用于打开计算器,计算器中各个类的关系如图 2.3 所示,
从图中可以看出,我们的界面类继承了 java.swing.JFrame 类,计算器类使用了界面类,界面类使用了
功能类,功能类使用了 MyMath 工具类,下面章节将对这些计算器的相关类作详细介绍。
![](https://csdnimg.cn/release/download_crawler_static/4850034/bg13.jpg)
第 2 章 仿 Windows 计算器
·4·
图 2.3 计算器类图
2.3.1 MyMath工具类
使用 float,double 两种浮点基本类型来进行计算,容易损失精度,所以,我们使用一个自己定义
了加,减,乘,除方法的类,此类使用 BigDecimal 来封装基本类型,在不损失精度的同时,也可以进
行超大数字的四则运算。为了方便调用,此类的方法全部都是静态方法,可以直接用“类名.方法名”调
用,这个类包含以下方法:
static double add( double num1, double num2 ),加法,使用来计算结果的数字是封装后的
num1 和 num2,并返回 double 类型。
static double subtract ( double num1, double num2 ),减法,使用来计算结果的数字是封装后
的 num1 和 num2,并返回 double 类型。
static double multiply ( double num1, double num2 ),乘法,使用来计算结果的数字是封装后
的 num1 和 num2,并返回 double 类型。
static double divide ( double num1, double num2 ),除法,使用来计算结果的数字是封装后的
num1 和 num2,并返回 double 类型。
MyMath 类提供了基础的四则运算方法,由于该类中所有的方法都是静态的,因此外界可以直接调
用。在实现 MyMath 的过程中需要注意的是,这几个四则运算方法,参数都是 double 类型的,要进行
运算的话,需要将 double 类型转换成一个 BigDecimal 对象,我们可以使用以下代码来创建一个
BigDecimal 对象:
![](https://csdnimg.cn/release/download_crawler_static/4850034/bg14.jpg)
第 2 章 仿 Windows 计算器
·5·
new BigDecimal(String.valueOf(number));
2.3.2 CalService类
CalService 类主要是用来处理计算器的业务逻辑,用户在操作计算器时,此类将计算结果,并且返
回,并且,会记录计算器的状态(用户的上一步操作)。包含以下方法:
String callMethod( String cmd , String text ),调用方法并返回计算结果。
String cal( String text , boolean isPercent ),用来计算加、减、乘、除法,并返回封装成 String
内型的结果。参数 text 是显示框中的数字内容,boolean 类型的参数 isPercent 代表是否有"%"
运算,如果有,便加上去。
String setReciprocal( String text ),用来计算倒数,并返回封装成 String 内型的结果。
String sqrt( String text ),用来计算开方,并返回封装成 String 内型的结果。
String setOp( String cmd , String text ),设置操作符号。
String setNegative( String text ),设置正负数,当 text 是正数时,返回负数的数字字符串,反
之,则返回正数的数字字符串。
String catNum( String cmd, String text ),连接输入的数字,每次点击数字,就把把新加的数字
追加到后面,并封装成字符串返回。
String backSpace( String text ),删除最后一个字符,并返回结果。
String mCmd( String cmd, String text ),用来实现“M+”、“MC”、“MR”、“MS”与存
储有关的功能。
String clearAll(),清除所有计算结果。
String clear( String text),清除上次计算结果。
CalService 类中的各个方法都是用于处理计算的逻辑,其中 callMethod 方法可以看作中一个中转
的方法,根据参数中的 cmd 值进行分发处理,例如调用该方法时将“CE”字符串作为 cmd,那么该方
法就根据这个字符串再调用需要执行“CE”的方法。如果需要做更好的程序解耦,我们可以将这些做
成一个状态模式,将各个计算的方法都抽象成一个计算接口,该接口提供一个计算的方法,然后按照具
体的情况,为该接口提供不同的实现,例如计算开方、计算倒数等实现,然后向 callMethod 传入不同
的实现类,直接调用接口方法。
2.3.3 CalFrame类
CalFrame 类继承 javax.swing.Jframe 类,主要是用于计算器界面的实现,此类中,排版了计算器
中各个组件的位置,为组件增加事件监听器,用来监听用户的操作,并做调用相应的方法,主要包含以
下方法:
void initialize(),初始化计算器界面。
ActionListener getActionListener(),如果动作监听器为空,则创建一个,并返回,如果不为空,
直接返回。
JTextField getTextField(),这个方法初始化输入框。
JButton[] getMButton(),此方法获得计算器的存储操作键。
JButton[] getRButton(),此方法获得计算器的结果操作键。
JButton[] getNButton(),此方法获得计算器的其它操作键。
由于 CalFrame 是界面类,因此所需要进行的业务处理并不多,更多的是监听用户的操作,并进行
分发处理。这就有点像 web 应用中的 MVC 模式中的 V(视图),并不处理任务的业务逻辑,主要职责
剩余482页未读,继续阅读
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/34736b3a1815484d8aac7610c67dda55_dwx_501.jpg!1)
极度释放
- 粉丝: 1
- 资源: 13
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)