`
color4you
  • 浏览: 3071 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

双色球机选

    博客分类:
  • java
 
阅读更多
前端时间发表了一片上色球有关的java小程序:http://color4you.iteye.com/admin/blogs/259442

  今天来博客发现大家发表了一些意见,自己也重新研究了一下这个小程序,其实大家说得很好,这个程序更像是面向过程语言。于是想到了对这个程序进行重构,因为今天是星期天,本来就无聊嘛。
 
  添加了一个Ball类,用于构建红色球和蓝色球的共同特征:
package com.color.program.ball;

import java.util.Arrays;

public abstract class Ball {

	protected String[] ball;
	protected int capacity;
	protected int index;
	
	/**
	 * 构造一个指定大小的ball
	 * @param capacity
	 */
	public Ball(int capacity){
		this.capacity = capacity;
		this.ball = new String[capacity];
	}
	
	/**
	 * 取得一个随机的字符串
	 * @return
	 */
	protected abstract String getNumber();
	
	/**
	 * 返回当前的ball中元素数量
	 * @return
	 */
	protected int size(){
		return this.index;
	}
	
	/**
	 * 确定能添加的数据没有越界
	 * @return
	 */
	protected boolean ensureCapacity(){
		return index<capacity;
	}
	
	/**
	 * 覆写toString方法
	 */
	public String toString(){
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<index;i++){
			sb.append(ball[i]+"\t");
		}
		return sb.toString();
	}
	
	/**
	 * 为ball中已经添加的元素排序
	 */
	protected void sort(){
		Arrays.sort(ball,0,index);
	}
	
	/**
	 * 根据指定的大小,完成数据的添加
	 */
	public void generate(){
		for(int i=0;i<capacity;i++){
			add();
		}
	}
	
	/**
	 * 添加一个元素到ball中,如果当前生成的随机数已经在数组中存在,
	 * 则重新生成号码,添加到此位置
	 */
	protected void add(){
		String number = getNumber();
		if(!ensureCapacity()){
			throw new RuntimeException("can't add more number");
		}
		for(int i=0;i<index;i++){
			if(number.equals(ball[i])){
				add();
				return;
			}
		}
		ball[index++] = number;
	}
}



然后是红色球:
package com.color.program.ball;

public class RedBall extends Ball{
	
	/**
	 * 创建指定大小的红色球
	 * @param capacity
	 */
	public RedBall(int capacity){
		super(capacity);
	}
	
	/**
	 * 默认为6个红色球
	 */
	public RedBall(){
		this(6);
	}

	/**
	 * 取得一个1--33之间的随机数,如果数字小于10,在数字前补加0,
	 * 保证为两位数
	 */
	@Override
	protected String getNumber() {
		int number = 1 + (int)Math.round(Math.random()*32);
		return number <10 ?"0"+number:""+number;
	}
	
	public boolean equals(Object ob){
		if(this == ob)
			return true;
		if(ob instanceof RedBall){
			RedBall red = (RedBall)ob;
			if(red.size() != this.size() || red.capacity != this.capacity)
				return false;
			this.sort();
			red.sort();
			
			for(int i=0;i<capacity;i++){
				if(this.ball[i].equals(red.ball[i])){
					return false;
				}
			}
			return true;
		}
		return false;
	}

}


蓝色球:
package com.color.program.ball;

public class BlueBall extends Ball{

	/**
	 * 创建指定大小的蓝色球
	 * @param capacity
	 */
	public BlueBall(int capacity){
		super(capacity);
	}
	
	/**
	 * 默认只有一个蓝色球
	 */
	public BlueBall(){
		this(1);
	}
	
	/**
	 * 取得一个1--16之间的随机数,如果小于10,则在前面补加一个0
	 * 保证是两位数
	 */
	@Override
	protected String getNumber() {
		int number = 1 + (int)Math.round(Math.random()*15);
		return number<10?"0"+number:""+number;
	}

	public boolean equals(Object ob){
		if(this == ob)
			return true;
		if(ob instanceof BlueBall){
			BlueBall blue = (BlueBall)ob;
			if(blue.size() != this.size() || blue.capacity != this.capacity)
				return false;
			this.sort();
			blue.sort();
			
			for(int i=0;i<capacity;i++){
				if(this.ball[i].equals(blue.ball[i])){
					return false;
				}
			}
			return true;
		}
		return false;
	}
}


完整包含红色球和蓝色球的双色球:
package com.color.program.ball;

public class DoubleBall {

	private Ball redBall;
	private Ball blueBall;
	
	public DoubleBall(int redSize,int blueSize){
		this.redBall = new RedBall(redSize);
		this.blueBall = new BlueBall(blueSize);
	}
	
	public DoubleBall(){
		this.redBall = new RedBall();
		this.blueBall = new BlueBall();
	}
	
	/**
	 * 产生一注完整号码,并完成排序
	 */
	public void generate(){
		redBall.generate();
		blueBall.generate();
		redBall.sort();
		blueBall.sort();
	}
	
	public void show(){
		System.out.print(redBall);
		System.out.println(blueBall);
	}
	
	public boolean equals(Object ob){
		if(this == ob){
			return true;
		}
		if(ob instanceof DoubleBall){
			DoubleBall db = (DoubleBall)ob;
			return (this.redBall.equals(db.redBall) && this.blueBall.equals(db.blueBall));
		}
		return false;
	}
}


测试的主程序:
package com.color.program.ball;

public class DoubleMain {

	public static void main(String[] args){
		for(int i=0;i<5;i++){
			DoubleBall doubleBall = new DoubleBall();
			doubleBall.generate();
			doubleBall.show();
		}
	}
}


希望大家指出我的不足之处,谢谢。
分享到:
评论

相关推荐

    模拟双色球机选彩票MFC小程序

    【模拟双色球机选彩票MFC小程序】是一款利用Microsoft Foundation Classes (MFC)库开发的小型应用程序,专为双色球彩票爱好者提供机选功能。MFC是Microsoft为Windows平台设计的一种C++类库,它封装了Windows API,...

    双色球机选程序

    【双色球机选程序】是一种利用编程技术模拟随机选取双色球彩票号码的软件应用。双色球是中国流行的彩票游戏,由6个红球和1个蓝球组成,红球范围从1到33,蓝球范围从1到16。本程序的核心在于生成一组符合规则的随机...

    最简单的双色球机选器v1.3+源码

    双色球机选器是一款基于C++编程语言开发的简单应用程序,主要功能是自动生成双色球彩票的随机号码,供用户参考选择。这个程序对于初学者来说是一个很好的学习资源,因为它提供了完整的源代码,可以帮助他们理解C++...

    linux c++ 双色球机选彩票源码

    linux c++ 双色球机选彩票源码 如何编译就不啰嗦了 可能有考虑不到的地方欢迎指正

    双色球机选软件

    一个用VC做的MFC基本对话框模式的双色球机选工具。有源代码,涉及到MFC基本控件应用,获取指定范围内随机数的算法,顺序排序算法,感兴趣的可以参考下。还有就是,随机出的号码可以买的哦,说不定就真中了!!

    双色球机选代码

    双色球机选代码,简单实用,代码简介。 可以学习一下。

    200smart进行双色球机选程序

    使用西门子plc进行双色球机选

    java双色球机选法程序解析

    Java双色球机选法程序解析 在本文中,我们将详细解析Java双色球机选法程序,该程序主要用于生成双色球机选法结果,包括红球和蓝球的随机生成和排序。下面是知识点总结: 1. 随机数生成:使用Java的Random类来生成...

    PHP模拟双色球随机选号

    PHP模拟双色球随机选号 一、开发环境 1、环境搭建:Windows 8+Apache 2.4.18+MySQL 5.7.11+PHP 7.1.0 。 2、文本编辑器:Sublime Text3。 二、主要技术 本实验主要使用while循环、GD库和函数的封装和调用实现迷宫的...

    双色球机选号码小程序 附带带注释

    本程序是关于对数组,随机数,循环语句的掌握,在做程序之前作出分析,首先建立两个数组红球和蓝球并用for语句遍历赋值,在新建一个数组记录从1-33个球里面随机出来的红球,同时定义一个boolean类型的数组用于比较...

    模拟机选双色球(html+js实现)

    用html+css+javascript实现的模拟机选双色球,通过定时器模拟选出一组或多组号码,可以将选择的号码进行排序,添加到列表中,导出excel,分页等操作,除此外还实现了图片的上传预览等功能......

    双色球机选ssq数据更新至2020090期.rar

    根据往期双色球情况,优化选号。 技术原理说明 根据偶然误差原理:红球和值偏 差  ∑△△  δ=√------------------- n 则它的或然误差为: ρ=(2*δ)/3 由往期可知和值平均值:H 则当期最可能出现和值为...

    php双色球在线机选程序V1.0

    php双色球在线机选程序V1.0(支持复式机选) 运行环境: php5.0及以上 安装方法: 上传所有文件到服务器. 本人平生也经常购买福彩双色球,本人不相信所谓的规律,我只相信运气。 所以每次选号都是直接机选。后来时间...

    javaScript版本实现机选双色球

    非常简单的双色球代码,希望对你的js开发有所帮助

    excel双色球选号

    excel双色球选号 随机性 取号 祝大家心想事成

    双色球手选、机选摇号程序

    这个小程序为喜爱双色球的朋友们带来福音啦,主要功能是可以实现部分号码手选、部分号码机选。这个功能可是在卖双色球的网页上都没有的哦。亲们,1个积分,赶快下载吧。

    c# 制作机选双色球

    通过这个程序,我们可以利用C#的强大功能轻松地模拟双色球机选过程。此代码适用于学习C#编程、理解随机数生成以及数据结构如数组和HashSet的应用。对于彩票爱好者来说,这也是一个有趣的实践项目,可以在娱乐中学习...

    双色球 单/复式随机选号 c#源码

    本项目是一个关于"双色球 单/复式随机选号 c#源码"的实践案例,旨在帮助我们了解如何使用C#进行随机数生成和简单的数据分析。 首先,双色球是一种流行的彩票游戏,其玩法分为单式和复式两种。单式选号通常是指选择6...

Global site tag (gtag.js) - Google Analytics