黑马程序员技术交流社区

标题: get和set方法-投色子问题 [打印本页]

作者: 黑马王双    时间: 2013-6-8 11:33
标题: get和set方法-投色子问题
本帖最后由 黑马王双 于 2013-6-8 13:13 编辑

题目:用用面向对象的思想实现如下的骰子游戏:丢下两个骰子,若分值的总值为7点,则赢;否则输。

代码:
一,
public class Test3 {
    public static void main(String[] args){
        DieGame dieGame = new DieGame();
        if (dieGame.play()) {
            System.out.println("你赢了!");
        } else {
            System.out.println("你输了!");
        }
    }
}

class Die {
     private int faceValue;
   
    // public int getFaceValue() {
    //  return faceValue;
    // }
    // public void setFaceValue(int faceValue) {
    //  this.faceValue = faceValue;
    // }

     public int roll() {
          this.faceValue = (int) (Math.random() * 6 + 1);
          return faceValue;
         
     }
}

class DieGame{
    private Die die1 = new Die();
    private Die die2 = new Die();

    public boolean play() {
        die1.roll();
        System.out.println("第一次点数:" + die1.roll());
        die2.roll();
        System.out.println("第二次点数:" + die2.roll());
        if (die1.roll() + die2.roll() == 7) {
            return true;
        } else {
            return false;
        }
    }
}

二,
public class Test3 {
    public static void main(String[] args){
        DieGame dieGame = new DieGame();
        if (dieGame.play()) {
            System.out.println("你赢了!");
        } else {
            System.out.println("你输了!");
        }
    }
}

class Die {
     private int faceValue;
   
     public int getFaceValue() {
      return faceValue;
     }
     public void setFaceValue(int faceValue) {
      this.faceValue = faceValue;
     }

     public void roll() {
          this.faceValue = (int) (Math.random() * 6 + 1);

     }
}

class DieGame{
    private Die die1 = new Die();
    private Die die2 = new Die();

    public boolean play() {
        die1.roll();
        System.out.println("第一次点数:" + die1.getFaceValue());
        die2.roll();
        System.out.println("第二次点数:" + die2.getFaceValue());
        if (die1.getFaceValue() + die2.getFaceValue() == 7) {
            return true;
        } else {
            return false;
        }
    }
}

下面的二设置了set和get,这个到底有什么作用,和一方法比较有什么不同?

作者: w270307032    时间: 2013-6-8 12:15
对于你的目前代码是没什么影响的,每个类内部的成员变量在私有化的同时,根据需要可以对外提供获取和设置它的方法。以楼主的例子来说,在开发的时候可能有这么种情况,如果class Die这个类不是楼主你自己写的,是别人已经定义好的类,但是楼主又想通过使用这个类来完成楼主以上的代码的话。楼主想实现随机投色子那自然是没问题了,但是如果你想作弊,比如控制某次摇色子的结果,如果没这2个方法,那你就做不到了。有了以上2个方法你就可以在class DieGame类中把
  1. die1.roll();
  2.         System.out.println("第一次点数:" + die1.getFaceValue());
复制代码
改成
  1. die1.setFaceValue(3);
  2.         System.out.println("第一次点数:" + die1.getFaceValue());
复制代码
的话,那你就将可以始终将第一次的色子结果控制在永远都是3了。如果class Die不是楼主写的,没这2方法的话,您是没办法直接去类的内部设 faceValue的值,来改变结果的。
作者: 黑马王双    时间: 2013-6-8 13:12
w270307032 发表于 2013-6-8 12:15
对于你的目前代码是没什么影响的,每个类内部的成员变量在私有化的同时,根据需要可以对外提供获取和设置它 ...

懂了,非常感谢。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2