本示例是写给目前上我JAVA课程的学生的,其他初学者亦可参考。

程序题目:使用本章定义的Die类设计并实现类PairOfDice,该类由两个Die对象组成。定义一些方法设定并得到每一个骰子的值,一个方法掷骰子及一个方法返回当前两个骰子值的总和。创建驱动类RollingDice2实例化并使用PairOfDice对象。
教材(JAVA程序设计教程,第七版,John Lewis等著,罗省贤等译,电子工业出版社)中定义的Die类如下:
  1. //********************************************************************
  2. //  Die.java       Author: Lewis/Loftus
  3. //
  4. //  Represents one die (singular of dice) with faces showing values
  5. //  between 1 and 6.
  6. //********************************************************************
  7. public class Die
  8. {
  9. private final int MAX = 6;  // maximum face value
  10. private int faceValue;  // current value showing on the die
  11. //-----------------------------------------------------------------
  12. //  Constructor: Sets the initial face value.
  13. //-----------------------------------------------------------------
  14. public Die()
  15. {
  16. faceValue = 1;
  17. }
  18. //-----------------------------------------------------------------
  19. //  Rolls the die and returns the result.
  20. //-----------------------------------------------------------------
  21. public int roll()
  22. {
  23. faceValue = (int)(Math.random() * MAX) + 1;
  24. return faceValue;
  25. }
  26. //-----------------------------------------------------------------
  27. //  Face value mutator.
  28. //-----------------------------------------------------------------
  29. public void setFaceValue (int value)
  30. {
  31. faceValue = value;
  32. }
  33. //-----------------------------------------------------------------
  34. //  Face value accessor.
  35. //-----------------------------------------------------------------
  36. public int getFaceValue()
  37. {
  38. return faceValue;
  39. }
  40. //-----------------------------------------------------------------
  41. //  Returns a string representation of this die.
  42. //-----------------------------------------------------------------
  43. public String toString()
  44. {
  45. String result = Integer.toString(faceValue);
  46. return result;
  47. }
  48. }

(Die.java)

使用这个类创建的PairOfDice类如下:
  1. public class PairOfDice
  2. {
  3. //定义两个骰子对象
  4. private Die firstDie, secondDie;
  5. //构造方法,初始化两个骰子对象
  6. public PairOfDice(Die die1, Die die2)
  7. {
  8. firstDie = die1;
  9. secondDie = die2;
  10. }
  11. //获得第一个骰子
  12. public Die getFirstDie() {
  13. return firstDie;
  14. }
  15. //设置第一个骰子
  16. public void setFirstDie(Die firstDie) {
  17. this.firstDie = firstDie;
  18. }
  19. //获得第二个骰子
  20. public Die getSecondDie() {
  21. return secondDie;
  22. }
  23. //设置第二个骰子
  24. public void setSecondDie(Die secondDie) {
  25. this.secondDie = secondDie;
  26. }
  27. //获得第一个骰子的面值
  28. public int getFirstDieFaceValue()
  29. {
  30. //直接调用它的getFaceValue()方法即可
  31. return firstDie.getFaceValue();
  32. }
  33. //设置第一个骰子的面值
  34. public void setFirstDieFaceValue(int value)
  35. {
  36. //直接调用它的setFaceValue()方法即可
  37. firstDie.setFaceValue(value);
  38. }
  39. //获得第二个骰子的面值
  40. public int getSecondDieFaceValue()
  41. {
  42. //直接调用它的getFaceValue()方法即可
  43. return secondDie.getFaceValue();
  44. }
  45. //设置第二个骰子的面值
  46. public void setSecondDieFaceValue(int value)
  47. {
  48. //直接调用它的setFaceValue()方法即可
  49. secondDie.setFaceValue(value);
  50. }
  51. //抛骰子
  52. public void roll()
  53. {
  54. //把两个骰子各抛一次
  55. firstDie.roll();
  56. secondDie.roll();
  57. }
  58. public int getFaceValueSum()
  59. {
  60. //获得两个骰子的面值之和,分别调用它们的getFaceValue()方法
  61. return firstDie.getFaceValue() + secondDie.getFaceValue();
  62. }
  63. //toString方法,返回对象的字符串信息
  64. //对象被打印或与字符串拼接时被自动调用
  65. public String toString()
  66. {
  67. String string = "第一个骰子的面值:"
  68. + getFirstDieFaceValue()
  69. + ";第二个骰子的面值:"
  70. + getSecondDieFaceValue()
  71. + ";两个骰子的面值和:"
  72. + getFaceValueSum();
  73. return string;
  74. }
  75. }

(PairOfDice.java)

驱动类RollingDice2如下:
  1. public class RollingDice2
  2. {
  3. public static void main(String[] args)
  4. {
  5. //调用构造方法,创建一个PairOfDice对象
  6. PairOfDice pair = new PairOfDice(new Die(), new Die());
  7. System.out.println("设定骰子的面值前");
  8. System.out.println("第一个骰子的面值:"
  9. + pair.getFirstDieFaceValue());
  10. System.out.println("第二个骰子的面值:"
  11. + pair.getSecondDieFaceValue());
  12. System.out.println("两个骰子的面值和:"
  13. + pair.getFaceValueSum());
  14. //设定第一个骰子的面值
  15. pair.setFirstDieFaceValue(3);
  16. //抛第二个骰子
  17. pair.getSecondDie().roll();
  18. System.out.println("设定第一个骰子的面值和抛第二个骰子后");
  19. System.out.println("第一个骰子的面值:"
  20. + pair.getFirstDieFaceValue());
  21. System.out.println("第二个骰子的面值:"
  22. + pair.getSecondDieFaceValue());
  23. System.out.println("两个骰子的面值和:"
  24. + pair.getFaceValueSum());
  25. //抛骰子
  26. pair.roll();
  27. System.out.println("抛骰子后");
  28. //直接调用pair的toString方法打印相关信息
  29. System.out.println(pair);
  30. }
  31. }

(RollingDice2.java)

把这三个文件放在同一个目录下,编译、运行结果如下:

注意:抛骰子是随机生成骰子面值(faceValue),因此每次运行结果一般都不一样。

程序很简单,主要意义在于培养面向对象的思维习惯。

PairOfDice示例相关推荐

  1. .net连接mysql数据_.net连接MYSQL数据库的方法及示例!

    连接MYSQL数据库的方法及示例 方法一: 使用MYSQL推出的MySQL Connector/Net is an ADO.NET driver for MySQL 该组件为MYSQL为ADO.NET ...

  2. CPU Cache原理与示例

    CPU Cache原理与示例 基础知识 现在的 CPU 多核技术,都会有几级缓存,老的 CPU 会有两级内存(L1 和 L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中:  ...

  3. 编译器 llvm clang 源码转换示例

    编译器 llvm clang 源码转换示例 从git获取llvm项目的源码方式: git clone https://github.com/llvm/llvm-project.git 下载源码后,进入 ...

  4. Cache Memory技术示例

    Cache Memory技术示例 为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么? 为什么需要cache memory 先思考第一个问题:程序是如何运 ...

  5. Swift与LLVM-Clang原理与示例

    Swift与LLVM-Clang原理与示例 LLVM 学习 从 简单汇编基础 到 Swift 不简单的 a + 1 作为iOS开发,程序崩溃犹如家常便饭,秉着没有崩溃也要制造崩溃的原则 每天都吃的很饱 ...

  6. C语言与OpenCL的编程示例比较

    C语言与OpenCL的编程示例比较 OpenCL支持数据并行,任务并行编程,同时支持两种模式的混合.对于同步 OpenCL支持同一工作组内工作项的同步和命令队列中处于同一个上下文中的 命令的同步. 在 ...

  7. OpenCL框架与示例

    OpenCL框架与示例 下面的图简单说明了OpenCL的编程框架,图是用的GPU,其他类似: 名词的概念: Platform (平台):主机加上OpenCL框架管理下的若干设备构成了这个平台,通过这个 ...

  8. ONNX MLIR应用示例(含源码链接)

    ONNX MLIR应用示例(含源码链接) 开放式神经网络交换在MLIR中的实现 (http://onnx.ai/onnx-mlir/). Prebuilt Containers 开始使用ONNX-ML ...

  9. TVM apps extension示例扩展库

    TVM apps extension示例扩展库 此文件夹包含TVM的示例扩展库.演示了其它库如何在C++和Python API中扩展TVM. 该库扩展了TVM的功能. python模块加载新的共享库, ...

最新文章

  1. 东半球最接地气的短链接系统设计
  2. python sort函数返回值_lambda函数与箭头函数在集合内置函数应用中的对照学习
  3. unity Android 剪贴板,Unity移动端的复制要这么写示例代码
  4. pycharm 修改新建文件时的头部模板
  5. 根据需要通过代码的方式加载js文件
  6. 2017-2018-1 20155222 201552228 实验五 通讯协议设计
  7. 【MVC模式】Front前端控制器模式、Jsp Model1 和 Jsp Model2、MVC思想
  8. 未雨绸缪:从软件测试到质量保证
  9. [转载]程序员如何写出杀手级简历
  10. hdu 5079 Square
  11. macbookpro升级后打不开eclipse_苹果更新MacBook Pro等蝶式键盘维修计划机型,包括最新2019款...
  12. Java 生成条形码 订单条形码
  13. 小木虫刻意隐瞒伪化生学科现状,劝人入坑,天打雷劈!
  14. 高数 | chx和shx分别是什么
  15. 使用downloadm3u8和ffmpeg下载m3u8格式视频
  16. 河北软件职业技术学院计算机专业在哪个校区,河北软件职业技术学院有几个校区,哪个校区最好及各校区介绍...
  17. 【MQ】Kafka如何保证幂等性
  18. 喜报丨酷雷曼成功挂牌北京股权交易中心科技创新板
  19. 搭建通过openOCD下载mini2440程序的调试平台
  20. ad18更改原理图纸张大小

热门文章

  1. 部分 DNS 查询因闰秒 bug 报错
  2. centos7 离线安装自签名harbor
  3. ubuntu16.04安装搜狗拼音2.0.0.0072
  4. ubuntu静态IP设置
  5. KERMIT,XMODEM,YMODEM,ZMODEM传输协议小结
  6. 打败 IE 的葵花宝典:CSS Bug Table
  7. containerd客户端工具nerdctl的使用
  8. Pika在360的应用与实践
  9. python小工具自动审单录凭证_跟着老板工作了二十年,最近来了个新员工然后我被开除了...
  10. RabbitMQ pull与push的区别