分析要求

一开始思考如何实现骰子类的时候,感觉只需要实现得到一个1到6的随机数的方法,这样看来似乎不是一件困难的事,原计划半个小时内完成,然而在老师的指导下,渐渐发现自己代码中不规范的地方所在。现在思考的问题变成,如何实现一个规范的骰子类,代码中变量的定义是否规范,是否将骰子独立成一个可重复调用,适应一般情况的类,而不是当条件变更的时候还要进行反复修改,这就是老师所要求要学会面向对象的思考。

设计实现

如图所示的各类间关系,当骰子数只有一个的时候,直接使用Dice类的方法;当骰子数不只一个的时候,通过使用骰盅Cup类调用Dice类的方法。

代码说明

1.Dice.java

//骰子类的实现

public class Dice {

private int faceValue; //定义骰子面值

public Dice(){

faceValue = (int)(Math.random() * 6) + 1; //获得一个1-6的随机数

}

public void roll(){ //摇骰子

faceValue = (int)(Math.random() * 6) + 1;

}

public void unnormalroll(){ //摇不出4的骰子

while(faceValue==4){

faceValue = (int)(Math.random() * 6) + 1;

}

}

public int getValue(){ //获得骰子数值

return faceValue;

}

}

2.Cup.java

//骰盅类的实现:可以放入多个骰子。

public class Cup {

private int num=1;// num记录骰子的个数,默认为一个

private Dice dice[]; //声明骰子数组

public Cup(){ //往骰盅放入一个骰子

dice = new Dice[num];

}

public Cup(int num){ //往骰盅放入多个骰子

this.num = num;

dice = new Dice[num];

}

public void roll(){ //摇动骰盅

int i;

for(i=0;i

dice[i] = new Dice();

}

}

public int getValue(){ //一个骰子开盅看大小,并返回该数值

return (dice[0].getValue());

}

public void getValues(int a[]){ //多个骰子开盅看大小。并将每个骰子的数值通过整型数组传出

int i;

for(i = 0;i < num;i++)

a[i]=dice[i].getValue();

}

public int getTotal(){ //返回多个骰子的总数值

int sum=0,i;

for(i=0;i

sum += dice[i].getValue();

}

return sum;

}

}

3.Player.java

//Player1进行测试

import java.util.Scanner;

public class Player1 {

public static void main(String[] args){

int i,myDice,normal; //myDice定义骰子的个数,normal标记是否使用正常骰子

Scanner input = new Scanner(System.in);

System.out.println("你要几个骰子?");

myDice = input.nextInt(); //从键盘读入骰子数量

if(myDice==1){//一个骰子的情况

System.out.println("使用摇不出4的骰子?Yes--0,No--1"); //特殊骰子情况

normal = input.nextInt();

Dice dice = new Dice();

if(normal==1) //摇骰子

dice.roll();

else

dice.unnormalroll(); //特殊骰子

System.out.println("You get "+dice.getValue());//输出所摇数值

}else{//多个骰子的情况

int[] myValue = new int[myDice];

Cup dice2 = new Cup(myDice);

dice2.roll();

dice2.getValues(myValue); //通过myvalue数组获取每个骰子的大小

for(i = 0;i < myDice;i++) //输出每个骰子的大小

System.out.println("第 "+(i+1)+"个骰子为:"+myValue[i]);

System.out.println("骰子总数为"+dice2.getTotal());//输出总大小

}

}

}

测试运行

1.一个正常骰子

2.一个特殊骰子

3.多个骰子

小结

总的来看,通过反复的修改,调试,最后用了将近两个小时。对比自己预估的时间,在要求分析和编写代码所用的时间较多,仔细思考,编写代码的不熟练也消耗了大部分时间,以及自己编写代码前,没有思考好各个类间的关系,导致多次大面积重改代码浪费许多时间。现在想想,写代码前先搞清楚类间关系,画好类图,养成这样的好习惯,对整体效率的提升有很大的意义。

java摇两个色子代码_摇个骰子 - mokuang - 博客园相关推荐

  1. java圆和椭圆的关系_圆与椭圆 - brifuture - 博客园

    一个单位圆的方程是 X2 + Y2 = 1,画在坐标系中: 对于圆来说,由于它是高度对称的,旋转属性对它而言意义不大. 在 canvas 画布上绘制一个圆很简单,有两种方法: 1. 使用 html5 ...

  2. python密码破解工具_一个最简单的博客园文章密码暴力破解器-python3实现

    一个最简单的博客园文章密码暴力破解器-python3实现 我之前想写路由器的密码暴力破解器,我手上只有极路由,发现极路由有安全限制,只能允许连续10密码错误,所以我改拿博客园练手. 博客园的博客有个功 ...

  3. java输出当前时间_JAVA中获取当前系统时间 - Matrix54 - 博客园

    JAVA中获取当前系统时间 - Matrix54 - 博客园 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleD ...

  4. java httpresponse headres属性,Http Header里的Content-Type - 飞鸿影~ - 博客园

    之前一直分不清楚post请求里Content-Type方式,如 application/x-www-form-urlencoded . multipart/form-data .本文会介绍Conten ...

  5. 项目代码风格要求(转自博客园-张子阳)

    博文原址:http://www.cnblogs.com/JimmyZhang/archive/2013/06/05/3118936.html#2815176 代码风格没有正确与否,重要的是整齐划一,这 ...

  6. java synoch 加锁_线程间通信 - HappyCowboy - 博客园

    线程之间需要一些协调通信,来共同完成一件任务.Java多线程中,线程之间通信最常用的两个方法是wait()与notify() 使用wait()与notify()实现线程间的通信,需注意: ①wait( ...

  7. java 主题爬虫_主题爬虫 - 长颈鹿Giraffe - 博客园

    参考了一些论文和网上的资料以及清华大学出版社出版的<自己动手写网络爬虫>这本书中的部分章节,设计了主题爬虫的主要体系结构如下图所示: Heritrix是一个由 java 开发的.开源的网络 ...

  8. markdown引入代码_给你自己的博客加个 Markdown

    今天给大家推荐一个简单易用的开源 Markdown 组件, Markdown 组件仓库地址是: https://github.com/pandao/editor.md Markdown 是什么 Mar ...

  9. access两位小数不进位_文章列表-火龙的博客 - PHP,GO,MySQL知识分享问题记录博客...

    HTTP状态码HTTP Status Code明细 发布时间:2020-10-27 13:54:54   分类:其他 常见的状态码: – 服务器成功返回网页 – 请求的网页不存在 – 服务不可用详解: ...

  10. java小光棍数_小光棍数 - NYNU_ACM - 博客园

    小光棍数 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道 ...

最新文章

  1. php mongo分页查询,PHP操作Mongodb之高级查询篇
  2. IDEA主题设置(字体颜色背景)
  3. GDCM:gdcm::Coder的测试程序
  4. One question regarding your note Note 1731777 - Debugging background work items
  5. 如何嗅闻交换网络和ARP骗子-ARP解释的原则
  6. 算法训练 P1101(java)
  7. 麒麟 UKUI 3.0 发布预告视频,能否接替 Win 7 成为大家的新选择?
  8. [转载] python 超高精度除法_Python十进制-除法,舍入,精度
  9. JBPM工作流(八)——流程实例(PI)Process Instance
  10. 【WIN】【C++】遍历文件夹下所有文件
  11. 微信公众平台接入token验证失败php,PHP开发公众号token验证失败是什么意思?其中一个原因 筋斗云网络...
  12. [Java] 身份证号码验证
  13. 设置透明主题引起动画失效以及打开其他应用闪现桌面图标的问题
  14. 【土旦】在vue filters中 优雅的使用对象的key、value来替换 if switch多重判断简化流程...
  15. Tkinter 组件详解(十):Scale
  16. 微信小程序——1、自定义顶部渐变色2、封装好的自定义顶部栏(父组件获取子组件的点击事件)
  17. js实现文件下载并重命名
  18. 免费申请使用IBM Cloud Lite(轻量套餐) 详细教程指南
  19. ACM-ICPC 2018 南京赛区网络预赛 E.AC Challenge 状压dp
  20. 字节跳动真能取代百度么?

热门文章

  1. WordPress博客自媒体主题:Autumn自定义主题配色
  2. [原]海纳百川 有容乃大:SparkR与Docker的机器学习实战
  3. echart表格颜色设置
  4. 大数据人工智能行业技术图谱
  5. 慕尼黑工业大学计算机博士申请条件,慕尼黑大学博士条件
  6. string.class是什么意思?
  7. 三维分子模型软件PyMOL
  8. <Zhuuu_ZZ>让我们来康康脚本流程控制
  9. APMServ中Apache启动失败解决方法大全
  10. ios使用video播放器,禁止自动全屏