您的位置:首页 > 其它

双色球,彩票抽取的三种不同的实现方法

2013-05-26 12:41 323 查看
1. 用Random() 类 定义对象生[b]成随机数,不从控制台输入数据,非排序输出,输出调用toString()[/b]

package self.temp8;
import java.util.*;
/**
 * 双色球的实现 
 * 数据从 [1,33] 随机生成 6个数据,数据不能重复
 * 2013-4-24 下午10:46:46
 */
public class DoublePoolDemo {
	public static void main(String[] args) {
		getPool();
	}
	
	 /* 使用一个标记数组 boolean[] used;对于已经使用的球进行标记 */
	public static void getPool() {
		Random r = new Random(); // 定义一个随机函数的对象
		boolean[] used = new boolean[34]; // 定义标记数组,长度为34,下标最大33
		//used[0] = true;
		int[] pool = new int[6];
		int i=0;
		while( i<6) {
			int index = r.nextInt(33) + 1; // 生成一个随机数
			if (used[index] != true) {  // 判断该随机数是否使用过,若未使用
				pool[i] = index;        // 则将此随机数赋值给数组 
				used[index] = true;     // 并标记此随机数已使用
				i++;
			}
		}
		/*    双重循环的实现
		 * for (int i = 0; i < pool.length; i++) {
			int index = r.nextInt(33) + 1;
			pool[i] = index;
			for (int j = 0; j < i; j++) {// 对数据进行重复处理
				if (pool[j] == pool[i]) {// 发现重复数据
					i--;// 取消当前位置的值
					break;
				}
			}
		}*/
		System.out.println (Arrays.toString(pool)); // 用toString() 方法输出
	} 

}


2、直接调用Math.random()生成随机数,从控制台输入数据,排序随机数,使用For each

package self.temp8;

import java.util.*;

/**
 * 双色球的实现 从n个数中抽取k个不同的数
 * 
 * 2013-5-26 上午11:51:44
 */
public class LotteryDrawing {
	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);

		System.out.print("需要抽取多少个数? ");
		int k = in.nextInt();

		System.out.print("最多可以抽取多少个数? ");
		int n = in.nextInt();

		// 给数组赋值,先将n个数存储到一个一位数组中 number[34];
		int[] numbers = new int
;
		for (int i = 0; i < numbers.length; i++)
			numbers[i] = i + 1;

		// 用数组result[] 存储抽取的数字
		int[] result = new int[k];
		for (int i = 0; i < result.length; i++) {
			// 用随机函数抽取一个数(0 ~ n-1)之间
			int r = (int) (Math.random() * n);// Math.random()返回一个0到1之间([0,1))的随机浮点数。
												// 用n乘以这个浮点数,得到从0到n-1之间的一个随机数

			result[i] = numbers[r];// 将抽取的数存储到result[]中

			// numbers[r]已经用过,将number[n-1]复制给numbers[r],即numbers[r] =
			// number[n-1],再将n-1,使得下一轮循环时,抽取的 随机数在0~n-2之间,达到去重的效果
			numbers[r] = numbers[n - 1];
			n--;
		}

		// 排序随机抽取的数
		Arrays.sort(result);
		for (int r : result) // For each 循环
			System.out.print(r+" ");
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: