A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马王双 中级黑马   /  2013-6-8 11:33  /  1615 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马王双 于 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,这个到底有什么作用,和一方法比较有什么不同?

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
对于你的目前代码是没什么影响的,每个类内部的成员变量在私有化的同时,根据需要可以对外提供获取和设置它的方法。以楼主的例子来说,在开发的时候可能有这么种情况,如果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的值,来改变结果的。

评分

参与人数 1技术分 +1 收起 理由
刘凯 + 1 很给力!

查看全部评分

回复 使用道具 举报
w270307032 发表于 2013-6-8 12:15
对于你的目前代码是没什么影响的,每个类内部的成员变量在私有化的同时,根据需要可以对外提供获取和设置它 ...

懂了,非常感谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马