利用Java单例模式,模拟生成双色球随机号码

问题要求:把双色球的开奖结果按以下形式输出:
/*
 * 
 * 红色球 (1-33 不能重复出6个数)  蓝色球(1-16 出一个数)

         结果模式:01,05,23,28,29,33-05

 * 
 * **/

分析:

            1.红球的值是多个不重复的值,要利用TreeSet集合类来转载返回。TreeSet类是Set的子类保证了数据不重复,而且TreeSet类可以利用默认比较器或自定义比较器来实现对加入该集合中元素的排序

       2.蓝色球只返回单一int元素,普通方法即可

       3.开奖结果字符串的拼接:利用Iterator遍历TreeSet对象拼接字符串

       4.单例模式的运用:程序运行一次 ,这个类只产生这一个结果 , 再运行一次 ,又是另一个结果 ;但是程序只运行一次  ,你多次调用这个方法结果是一样的。(重要

           


说明:本类中自定义比较器可以不使用,使用默认的即可。关于Comparator 参考:http://blog.csdn.net/ml1990s/article/details/11580779

Java代码:

package com.java1029.single.emphasis;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;

/*
 * 
 * 红色球 (1-33 不能重复出6个数)  蓝色球(1-16 出一个数)

         结果模式:01,05,23,28,29,33-05

 * 
 * **/
public class TicketResult {
   private TicketResult(){}
   //把每期结果作为属性私有化,且静态化,每次JVM运行(运行一次程序)初始化该类时,即为该属性赋值且不论这次运行创建多少个对象只返回一个同一个值
   private static final String result = getResult();
    public static String getFinallyResult(){
    	return result;
    }
 
   /**
    * 利用TreeSet装入红色球选出的值(1.值不重复    2.利用默认比较器或自定义比较器可以实现排序)
    * @return
    */
   private static TreeSet<Integer> getRedBall(){
    	TreeSet<Integer> set = new TreeSet<Integer>(new MyComparator());
    	Random ran = new Random();
    	//保证只取6个不重复的值
    	while(set.size()<6){
    		//nextInt(int n) 方法:随机产生0~n(包括0,不包括n)之间的int值
    		set.add(ran.nextInt(33)+1);
    	}
		return set;
    }
    
   /**
    * 获取特殊号码值
    * @return
    */
    private static int getBlueBall(){
    	Random ran = new Random();
		return ran.nextInt(16)+1;
    }
    
    /**
     * 拼接字符串,返回固定格式的开奖结果
     * @return
     */
    private static String getResult(){
    	TreeSet<Integer> set = getRedBall();
    	int blue = getBlueBall();
    	Iterator<Integer> it = set.iterator();
    	StringBuffer sbf = new StringBuffer();
    	while(it.hasNext()){
    		int temp =it.next();
    		//把1,2,3...等转为01,02,03...
    		if(temp<10)
    		   sbf.append("0"+temp+",");
    		else
    		   sbf.append(temp+",");
    	}
    	String result = sbf.toString().substring(0,sbf.toString().lastIndexOf(","));
    	result = result +"-"+blue;
    	return result;
    }
}

/**
 * 自定义比较器
 * @author ml1990s
 *
 */
class MyComparator implements Comparator<Integer>{

	@Override
	public int compare(Integer o1, Integer o2) {
		
		return o1-o2;
	}
	
	
}


对以上代码的测试类

package com.java1029.single.emphasis;

public class Test {

	
	public static void main(String[] args) {
		System.out.println(TicketResult.getFinallyResult());
		System.out.println(TicketResult.getFinallyResult());

	}

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值