本示例是写给目前上我JAVA课程的学生的,其他初学者亦可参考。
程序题目:使用本章定义的Die类设计并实现类PairOfDice,该类由两个Die对象组成。定义一些方法设定并得到每一个骰子的值,一个方法掷骰子及一个方法返回当前两个骰子值的总和。创建驱动类RollingDice2实例化并使用PairOfDice对象。
教材(JAVA程序设计教程,第七版,John Lewis等著,罗省贤等译,电子工业出版社)中定义的Die类如下:
- //********************************************************************
- // Die.java Author: Lewis/Loftus
- //
- // Represents one die (singular of dice) with faces showing values
- // between 1 and 6.
- //********************************************************************
- public class Die
- {
- private final int MAX = 6; // maximum face value
- private int faceValue; // current value showing on the die
- //-----------------------------------------------------------------
- // Constructor: Sets the initial face value.
- //-----------------------------------------------------------------
- public Die()
- {
- faceValue = 1;
- }
- //-----------------------------------------------------------------
- // Rolls the die and returns the result.
- //-----------------------------------------------------------------
- public int roll()
- {
- faceValue = (int)(Math.random() * MAX) + 1;
- return faceValue;
- }
- //-----------------------------------------------------------------
- // Face value mutator.
- //-----------------------------------------------------------------
- public void setFaceValue (int value)
- {
- faceValue = value;
- }
- //-----------------------------------------------------------------
- // Face value accessor.
- //-----------------------------------------------------------------
- public int getFaceValue()
- {
- return faceValue;
- }
- //-----------------------------------------------------------------
- // Returns a string representation of this die.
- //-----------------------------------------------------------------
- public String toString()
- {
- String result = Integer.toString(faceValue);
- return result;
- }
- }
(Die.java)
使用这个类创建的PairOfDice类如下:
- public class PairOfDice
- {
- //定义两个骰子对象
- private Die firstDie, secondDie;
- //构造方法,初始化两个骰子对象
- public PairOfDice(Die die1, Die die2)
- {
- firstDie = die1;
- secondDie = die2;
- }
- //获得第一个骰子
- public Die getFirstDie() {
- return firstDie;
- }
- //设置第一个骰子
- public void setFirstDie(Die firstDie) {
- this.firstDie = firstDie;
- }
- //获得第二个骰子
- public Die getSecondDie() {
- return secondDie;
- }
- //设置第二个骰子
- public void setSecondDie(Die secondDie) {
- this.secondDie = secondDie;
- }
- //获得第一个骰子的面值
- public int getFirstDieFaceValue()
- {
- //直接调用它的getFaceValue()方法即可
- return firstDie.getFaceValue();
- }
- //设置第一个骰子的面值
- public void setFirstDieFaceValue(int value)
- {
- //直接调用它的setFaceValue()方法即可
- firstDie.setFaceValue(value);
- }
- //获得第二个骰子的面值
- public int getSecondDieFaceValue()
- {
- //直接调用它的getFaceValue()方法即可
- return secondDie.getFaceValue();
- }
- //设置第二个骰子的面值
- public void setSecondDieFaceValue(int value)
- {
- //直接调用它的setFaceValue()方法即可
- secondDie.setFaceValue(value);
- }
- //抛骰子
- public void roll()
- {
- //把两个骰子各抛一次
- firstDie.roll();
- secondDie.roll();
- }
- public int getFaceValueSum()
- {
- //获得两个骰子的面值之和,分别调用它们的getFaceValue()方法
- return firstDie.getFaceValue() + secondDie.getFaceValue();
- }
- //toString方法,返回对象的字符串信息
- //对象被打印或与字符串拼接时被自动调用
- public String toString()
- {
- String string = "第一个骰子的面值:"
- + getFirstDieFaceValue()
- + ";第二个骰子的面值:"
- + getSecondDieFaceValue()
- + ";两个骰子的面值和:"
- + getFaceValueSum();
- return string;
- }
- }
(PairOfDice.java)
驱动类RollingDice2如下:
- public class RollingDice2
- {
- public static void main(String[] args)
- {
- //调用构造方法,创建一个PairOfDice对象
- PairOfDice pair = new PairOfDice(new Die(), new Die());
- System.out.println("设定骰子的面值前");
- System.out.println("第一个骰子的面值:"
- + pair.getFirstDieFaceValue());
- System.out.println("第二个骰子的面值:"
- + pair.getSecondDieFaceValue());
- System.out.println("两个骰子的面值和:"
- + pair.getFaceValueSum());
- //设定第一个骰子的面值
- pair.setFirstDieFaceValue(3);
- //抛第二个骰子
- pair.getSecondDie().roll();
- System.out.println("设定第一个骰子的面值和抛第二个骰子后");
- System.out.println("第一个骰子的面值:"
- + pair.getFirstDieFaceValue());
- System.out.println("第二个骰子的面值:"
- + pair.getSecondDieFaceValue());
- System.out.println("两个骰子的面值和:"
- + pair.getFaceValueSum());
- //抛骰子
- pair.roll();
- System.out.println("抛骰子后");
- //直接调用pair的toString方法打印相关信息
- System.out.println(pair);
- }
- }
(RollingDice2.java)
把这三个文件放在同一个目录下,编译、运行结果如下:
注意:抛骰子是随机生成骰子面值(faceValue),因此每次运行结果一般都不一样。
程序很简单,主要意义在于培养面向对象的思维习惯。
本文转自 NashMaster2011 51CTO博客,原文链接:http://blog.51cto.com/legend2011/1060034,如需转载请自行联系原作者