方式一:
/**
* @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");
}
}