问题要求:把双色球的开奖结果按以下形式输出:
/*
*
* 红色球 (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());
}
}