使用Java语言编程实现摇号机

使用Java语言编程实现摇号机_第1张图片

 使用Java语言编程实现摇号机_第2张图片

 使用Java语言编程实现摇号机_第3张图片

 使用Java语言编程实现摇号机_第4张图片

方式一:

/**
 * @author Lantzrung
 * @date 2022年7月23日
 * @Description
 */

import java.util.Arrays;

//控制器
public class Controller {

	// 定义一个摇号器的引用
	Maker maker;

	// 安装摇号器的方法
	void install(Maker m) {
		this.maker = m;
	}

	// 摇号方法
	public void play() {
		maker.doPlay(this);
	}

	// 回调方法,打印输出开奖结果
	public void onResult(int[] arr, String type) {
		System.out.println(type + "的摇号结果为:" + Arrays.toString(arr));
	}

	// 测试代码
	public static void main(String[] args) {

		// 控制器控制摇号器,摇双色球
		Controller c = new Controller();
		// 摇号器
		Maker maker = new DoubleBall();
		// 控制器安装摇号机
		c.install(maker);
		// 摇双色球
		c.play();

		// 非常6+1
		Maker maker1 = new SevenBall();
		// 控制器安装摇号机
		c.install(maker1);
		// 摇非常6+1
		c.play();
	}
}
/**
 * @author Lantzrung
 * @date 2022年7月23日
 * @Description
 */
package com.day0723.homework;
import java.util.Arrays;
//摇号器的接口
public interface Maker {
	void doPlay(Controller c);
}

//摇号实现类:双色球
class DoubleBall implements Maker {

	// 25选5,不重复
	@Override
	public void doPlay(Controller c) {
		// 1、定义一个数组用来存放结果
		int[] res = new int[5];
		// 2、定义一个标记数组【标记当前的随机数是否被获取】【0表示为没有获取过,非0表示已经
        // 获取到了】
		int[] label = new int[37];
		// 定义一个初始化变量控制循环 i 【次数】
		int i = 0;
		// 3、循环获取5个随机数
		while (true) {
			// 循环退出
			if (i >= 5) {
				break;
			}
			// --获取随机数
			int ran = (int) ((Math.random() * 25) + 1);
			// --判断--没有获取 // 赋值到res数组
			if (label[ran] == 0) {
				res[i] = ran;
				// 将标志位改为非0
				label[ran] = 1;
				// i++
				i++;
			} else {
				// --判断--已经获取
				continue;
			}
		}
		// 4、得到结果,进行排序【数组工具类】
		Arrays.sort(res);
		// 5、响应结果给controller
		c.onResult(res, "双色球");
	}
}

//摇号实现类:6+1
class SevenBall implements Maker {

	@Override
	public void doPlay(Controller c) {
		// 1、定义一个数组用来存放结果
		int[] res = new int[7];
		// 2、定义一个标记数组【标记当前的随机数是否被获取】【0表示为没有获取过,非0表示已经 
        // 获取到了】
		int[] label = new int[37];// 15 label[15]==0 //25 label[25]==0
		// 定义一个初始化变量控制循环 i 【次数】
		int i = 0;// 0~4
		// 3、循环获取7个随机数
		while (true) {
			// 循环退出
			if (i >= 7) {
				break;
			}
			// --获取随机数
			int ran = (int) (Math.random() * 36) + 1;
			if (label[ran] == 0) {
				// --判断--没有获取
				// 赋值到res数组
				res[i] = ran;
				// 将标志位改为非0
				label[ran] = 1;
				// i++
				i++;
			} else {
				// --判断--已经获取
				continue;
			}
		}
		// 4、得到结果,进行排序【数组工具类】
		Arrays.sort(res);
		// 6、拷贝一个新的数组,增加一个长度,并生成特别的号码
		res = Arrays.copyOf(res, 7);
		res[6] = (int) ((Math.random() * 16) + 1);
		// 5、响应结果给controller
		c.onResult(res, "非常6+1");
	}
}

方式二:

/**
 * @author Lantzrung
 * @date 2022年7月22日
 * @Description
 */
import java.util.Arrays;

public class Controller {

	Maker maker;

	void install(Maker m) {
		this.maker = m;
	}

	public void play() {
		maker.doPlay(this);
	}

	public void onResult(int[] arr, String type) {
		System.out.println("彩票名称:" + type);
		System.out.println("中奖结果:" + Arrays.toString(arr));
	}

	public static void main(String[] args) {
		Controller c = new Controller();
		DoubleBall d = new DoubleBall();
		SevenBall s = new SevenBall();
		
		c.install(d);
		c.play();

		c.install(s);
		c.play();
	}
}
/**
 * @author Lantzrung
 * @date 2022年7月22日
 * @Description
 */

public interface Maker {
	void doPlay(Controller c);
}

//双色球
class DoubleBall implements Maker {
	@Override
	public void doPlay(Controller c) {
		// 创建一个数组用来存放数据
		int[] arr = new int[5];
		// 外循环
		for (int i = 0; i < arr.length; i++) {
			// 随机数
			arr[i] = (int) (Math.random() * 26 + 1);
			// 内循环
			for (int j = 0; j < i; j++) {
				// 判断当i和j的数相等 i自减 填满数组后 退出循环体
				if (arr[i] == arr[j]) {
					i--;
					break;
				}
			}
		}
		// 数组回调
		c.onResult(arr, "双色球");
	}
}

class SevenBall implements Maker {
	@Override
	public void doPlay(Controller c) {
		int[] arr = new int[7];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) (Math.random() * 36 + 1);
			for (int j = 0; j < i; j++) {
				if (arr[i] == arr[j]) {
					i--;
					break;
				}
			}
		}
		c.onResult(arr, "非常6+1");
	}
}

你可能感兴趣的:(Java练习代码,java,jvm,servlet,大数据,算法)