扩展:动态扩容数组
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src
- 源数组。srcPos
- 源数组中的起始位置。dest
- 目标数组。destPos
- 目的地数据中的起始位置。length
- 要复制的数组元素的数量。
package com.hrf.lotterySystem01;
import java.util.Random;
import java.util.Scanner;
import com.hrf.lanou.java05.MyException;
public class LotterySystemClassTest {
private static Scanner sc = new Scanner(System.in);
private static Random r = new Random();
private static int surplus = 100; // 剩余钱
private static int maxCount = 200; // 用来统计最大购买数
private static Lottery[] arr = new Lottery[maxCount];// 彩票数组
// 二维数组,第一维数组代表统计最大购买数,第二维数组只有四个数字代表三个号码+直选/组六
private static int index = 0;// 数组下标,已经购买的彩票数目
public static void main(String[] args) {
arr = extendsArray(arr);
optional();
}
// 动态扩容一维数组
public static Lottery[] extendsArray(Lottery[] array) {
Lottery[] arr = new Lottery[array.length * 100]; // 扩展为原来100倍
for (int i = 0; i < array.length; i++) {
// System.arraycopy(src, srcPos, dest, destPos, length);
System.arraycopy(array, 0, arr, 0, array.length); // 数组拷贝
}
return arr;
}
// 3D彩票系统要实现 查询余额,充值,自选彩票,机选彩票,查看购买彩票,开奖,退出等功能
// 选择序号
public static void optional() {
program();
System.out.println("请输入你要选择的项目数字 : ");
while (true) {
int num = sc.nextInt();
if (num >= 0 && num <= 6) {
switch (num) {
case 1:
// 查看余额
blance();
break;
case 2:
// 进行充值
recharge();
break;
case 3:
// 自选
selfOptionalLottery();
break;
case 4:
// 机选
machineOptionalLottery();
break;
case 5:
// 查看购买彩票
findBuyLottery();
break;
case 6:
// 开奖
drawPrice();
break;
case 0:
// 退出
exit();
return;
}
} else {
System.out.println("你输入的数字有误,请重新输入:");
optional();
}
return;
}
}
// 属性元素,主菜单
public static void program() {
System.out.println("------华丽分割线------");
System.out.println("1.查看余额");
System.out.println("2.充值");
System.out.println("3.自选");
System.out.println("4.机选");
System.out.println("5.查看购买彩票");
System.out.println("6.开奖");
System.out.println("0.退出");
}
// 1.查看余额
public static void blance() {// 初始余额
System.out.println("当前余额为:" + surplus + "元");
optional();
}
// 2.充值
public static void recharge() {
System.out.println("充值活动:充50送20元,充100送50元,充500送300元");
System.out.println("请输入充值额度:");
int money = sc.nextInt();
if (money >= 50 && money < 100) {
money += 20;
surplus += money;
System.out.println("充值成功 ! 当前余额为:" + surplus);
} else if (money >= 100 && money < 500) {
money += 50;
surplus += money;
System.out.println("充值成功 ! 当前余额为:" + surplus);
} else if (money >= 500) {
money += 300;
surplus += money;
System.out.println("充值成功 ! 当前余额为:" + surplus);
} else if (money < 0) {
System.out.println("输入有误,请重新输入:");
recharge();
} else {
surplus += money;
System.out.println("充值成功 ! 当前余额为:" + surplus);
}
System.out.println("1.继续充值 , 2.退出");
System.out.println("请选择:");
int re = sc.nextInt();
if (re == 1) {
recharge();
}else if (re == 2) {
optional();
}else {
System.out.println("你输入的数字有误哦!系统为你调到主菜单");
optional();
}
}
// 3.自选
public static void selfOptionalLottery() {
System.out.println("请输入购买彩票的类型: 1.直选 , 2.组六");
int type = sc.nextInt();// 输入的类型
if (type == 1 || type == 2) {
System.out.println("请输入号码(0~9):");
int num1 = sc.nextInt();
int num2 = sc.nextInt();
int num3 = sc.nextInt();
if ((num1 >= 0 && num1 <= 9) && (num2 >= 0 && num2 <= 9) && (num3 >= 0 && num3 <= 9)) {
Lottery lottery = new Lottery(num1, num2, num3, type);// 创建彩票
arr[index] = lottery;// 把彩票存入数组
index++;
surplus -= 5;// 减钱
System.out.println("购买成功!");
optional();
} else {
System.out.println("输入有误,请重新输入!");
selfOptionalLottery();
// 如果想要抛出异常可以这样写,不过要自定义一个异常类去继承RuntimeException
throw new MyException("输入的数字大于9或者小于0!");
}
}
}
// 4.机选
public static void machineOptionalLottery() {
System.out.println("请输入购买彩票的类型: 1.直选 , 2.组六");
int type = sc.nextInt();
if (type == 1 || type == 2) {
System.out.println("输入要买多少注:");
int count = 0;// 输入买的注数,一维数组里面的下标
while (true) {
count = sc.nextInt();// 输入要买的注数
if (count > 0) {
if (count + index > arr.length) {
System.out.println("超过最大购买次数!");// 最大购买次数为100
System.out.println("请重新输入:");
} else if (count * 5 < surplus) {
break;// 跳出循环,余额充足
} else {
System.out.println("余额不足请先充值!为你跳到菜单页面!");
optional();// 到菜单页面
}
} else {
System.out.println("你的输入有误,请重新输入:");
}
}
// 条件小于count注数,随机生成count行,对index++操作;
for (int i = 0; i < count; i++) {
int num1 = r.nextInt(10);
int num2 = r.nextInt(10);
int num3 = r.nextInt(10);
Lottery lottery = new Lottery(num1, num2, num3, type);// 创建彩票
arr[index] = lottery;// 把彩票存到数组里面
index++;// 每存一个就自增一个
}
surplus -= count * 5;// 减钱
System.out.println("机选" + count + "次");
optional();
} else {
System.out.println("你输入的有误,请重新输入:");
machineOptionalLottery();
}
}
// 5.查看购买彩票
public static void findBuyLottery() {
if (index > 0) {
for (int i = 0; i < index; i++) {
System.out.print(arr[i] + " ");
if (arr[i].getType() == 1) {
System.out.println("直选");
} else {
System.out.println("组六");
}
}
} else {
System.out.println("你还没有购买任何彩票哦!");
}
optional();
}
// 6.开奖
public static void drawPrice() {
int price1 = r.nextInt(10);
int price2 = r.nextInt(10);
int price3 = r.nextInt(10);
System.out.println("开奖号码为:" + price1 + " " + price2 + " " + price3 + " ");
// 把中奖号码封装成一个彩票
Lottery p1 = new Lottery(price1, price2, price3);
for (int i = 0; i < index; i++) {
// 找到买到的彩票
Lottery lottery = arr[i];
// 判断彩票有没有中奖
int type = lottery.getType();//购买彩票的第四个数的数据
if (type == 1) {// 直选
if (lottery.isDirectSelect(p1)) {
System.out.println(lottery.toString()+"直选" + " " +"恭喜你中奖了!");
// 加钱
surplus += 1000;
} else {
System.out.println(lottery.toString()+"直选" + " " +"很遗憾你没有中奖!请再接再厉!");
}
} else {// 组六
if (lottery.isSetOfSix(p1)) {
System.out.println(lottery.toString()+ "组六" + " " +"恭喜你中奖了!");
surplus += 100;
} else {
System.out.println(lottery.toString()+ "组六" + " " +"很遗憾你没有中奖!请再接再厉!");
}
}
}
index = 0;// 清空数组
optional();
}
// 0.退出
public static void exit() {
System.out.println("欢迎下次光临!");
}
}
package com.hrf.lotterySystem01;
import java.util.Arrays;
public class Lottery {
// 彩票的对象代表一注信息
private int num1;
private int num2;
private int num3;
private int type;
public Lottery(int num1, int num2, int num3, int type) {
super();
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
this.type = type;
}
public Lottery(int num1, int num2, int num3) {
super();
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
public Lottery() {
super();
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public int getNum3() {
return num3;
}
public void setNum3(int num3) {
this.num3 = num3;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String toString() {
return num1 + " " + num2 + " " + num3 + " ";
}
// 判断直选是否正确
public boolean isDirectSelect(Lottery cp) {
if(num1 == cp.num1 && num2 == cp.num2 && num3 == cp.num3) {
return true;
}else {
return false;
}
}
// 判断组六是否正确
public boolean isSetOfSix(Lottery cp) {
int[] arr1 = {num1, num2, num3};
int[] arr2 = {cp.num1, cp.num2, cp.num3};
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1, arr2);
}
}