利用java模拟双色球选号代码分享

目录

双色球规则

代码功能

ArrayList类

bull类

bullColor类

Test类

运行结

双色球规则

双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。投注时选择6个红色球号码和1个蓝色球号码组成一注进行单式投注。

代码功能

代码可以在1-33中随机选取6个不重复的数字放入前6个红球中,在蓝色区随机在1-16中完成一次选取,模拟双色球选取的运行规律。

ArrayList类

package com.zjh3;

import java.util.Arrays;

public class ArrayList {
	private Ball[] arr;
	private int size = 0;

	public ArrayList() {
		this(10);
	}

	public ArrayList(int length) {
		arr = new Ball[length];
	}

	public void add(Ball data) {
		arr[size++] = data;
		if (size >= arr.length)
			resize();
	}

	/**
	 * @param index 需要删除的数据下标
	 */
	public Ball delete(int index) {
		if (index >= size || size < 0)
			throw new ArrayIndexOutOfBoundsException();
		Ball res = arr[index];
		System.arraycopy(arr, index + 1, arr, index, arr.length - index - 1);
		arr[size - 1] = null;
		size--;
		return res;
	}

	public void update(int index, Ball data) {
		if (index >= size || size < 0)
			throw new ArrayIndexOutOfBoundsException();
		arr[index] = data;
	}

	public Ball[] getData() {
		Ball[] res = new Ball[size];
		System.arraycopy(arr, 0, res, 0, size);
		return res;
	}

	public String toString() {
		return Arrays.toString(arr);
	}

	private void resize() {
		Ball[] res = new Ball[arr.length * 3 / 2];
		System.arraycopy(arr, 0, res, 0, arr.length);
		this.arr = res;
	}

	public int size() {
		return this.size;
	}

	public Ball[] sort() {
//		for(int i=1;i<size;i++) {
//			for(int k=0;k<size-i;k++) {
//				if(arr[k].compareTo(arr[k+1])>0) {
//					Ball tmp=arr[k];
//					arr[k]=arr[k+1];
//					arr[k+1]=tmp;
//				}
//			}
//		}

		Ball[] arr1 = this.getData();
		Arrays.sort(arr1);
		return arr1;
	}
}

bull类

package com.zjh3;



public final class Ball implements Comparable<Ball> {
	private final int number;
	private final BallColor color;

	public Ball(int num,BallColor color) {
		this.number = num;
		this.color = color;
	}

	public int getNumber() {
		return number;
	}

	public BallColor getColor() {
		return color;
	}

	@Override
	public String toString() {
		return "(" + number + ", " + color + ")";
	}

	@Override
	public int compareTo(Ball o) {
		int res = this.color.compareTo(o.color);
		if (res == 0) {
			res=this.number-o.number;
		}
		res*=-1;
		return res;
	}

}

bullColor类

package com.zjh3;

public enum BallColor {
	RED("红球"), BLUE("蓝球");
	
	private String name;
	private BallColor(String name) {
		this.name=name;
	}
	@Override
	public String toString() {
		return this.name;
	}
}

Test类

 

package com.zjh3;

import java.util.Arrays;
import java.util.Random;

//红色球号码从1--33中选择;蓝色球号码从1--16中选择
//每注投注号码由6个红色球号码和1个蓝色球号码组成
public class Test1 {
	public static void main(String[] args) {
		ArrayList list1 = new ArrayList();
		for (int i = 1; i <= 33; i++)
			list1.add(new Ball(i, BallColor.RED));
		ArrayList list3 = new ArrayList(7);
		Random r = new Random();
		for (int i = 0; i < 6; i++) {
			int pos=r.nextInt(list1.size());
			com.zjh3.Ball data=list1.delete(pos);
			list3.add(data);
		}
		list3.add(new Ball(r.nextInt(16)+1, BallColor.BLUE));
		list3.sort();
		com.zjh3.Ball[] res=list3.getData();
		System.out.println(Arrays.toString(res));
	}
}

运行结果

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,让我来解答你的问题。 首先,冷却算法是一种基于概率的优化算法,可以用来解决许多问题,包括彩票号。在本例中,我们将使用Java来模拟双彩票的号过程。 以下是基于冷却算法的双号程序的实现步骤: 1. 定义双的号码范围和号规则。双中,红的号码范围是1-33,蓝的号码范围是1-16。每次号需要择6个红和1个蓝。 2. 初始化当前候的号码组合。我们可以使用随机数来生成一组初始的号码组合。在这个过程中,我们需要确保每个号码都是唯一的。 3. 计算当前号码组合的得分。在双中,得分是根据中的号码与中奖号码的匹配程度来计算的。我们可以设定一个简单的得分规则,例如每个红匹配得分为1,每个蓝匹配得分为2。 4. 定义冷却函数。冷却函数用于模拟降温过程,从而使得候的号码组合逐渐趋向最优解。我们可以使用指数函数作为冷却函数,其中初始温度和降温速率是需要调整的参数。 5. 在每个温度下,随机生成新的号码组合,并计算其得分。如果新的号码组合得分比当前号码组合高,则接受新的号码组合。否则,以一定概率接受新的号码组合。这个概率是由当前温度和新旧号码组合得分差距来决定的,可以使用Boltzmann分布来计算。 6. 不断降温直到温度达到设定的极小值。在这个过程中,我们记录下每个温度下的最优解,以及对应的得分。最终输出得分最高的号码组合即可。 这就是基于冷却算法的双号程序的实现过程。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值