原理在上一篇已经讲过了,这里讲数组延伸一下,首先是账户和密码用数组去存,这就要求它们具备一致性,同时登录时的信息应该传递到后面的摸奖,如果重新登录,之前的登录状态应该修正为未登录由于未登录不能摸奖,因此不必考虑上一个循环后的残留,而如果重新登陆成功,那么fuze改动,信息更新为目前适配,这里主要还是考一个遍历的熟练长度和驾驭多个循环的能力,大家可以试着康康(杰哥不要啊)
代码如下:
import java.util.Scanner;
public class shopLess {
public static void main(String[] args) {
Scanner ob = new Scanner(System.in);
System.out.println("******欢迎进入黑心商铺抽奖******");
boolean flag = true;
boolean fl = false;
boolean Flag = false;
String name[] = new String[100];//存储账户
String temp;//设置临时登录变量
String Temp;
String password[] = new String[100];//存储密码
int card[] = new int[100];
int lch = 0;//设置账户号
int button;
int fuze = 0;//标记匹配账户
while (flag == true) {
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
flag = false;//初始化循环标签
button = ReInt();
switch (button) {
case 1://实现注册功能 可以输入相同用户名,每种用户名的密码都能通过
System.out.println("请输入您的账户名:");
name[lch] = ob.next();
System.out.println("请输入您的密码:");
password[lch] = PassWord();
card[lch] = (int) (Math.random() * 9000 + 1000);
System.out.println("账号\t密码\t用户卡号");
System.out.println(name[lch] + "\t" + password[lch] + "\t"
+ card[lch]);
lch++;//增加一个账户位置
Flag = true;//声明已经注册成功
flag = IF();
if (flag) {
continue;
}
break;
case 2://实现登陆功能
if (Flag) {
fl = false;
System.out.println("请输入您的账号");
Temp = ob.next();
for (int i = 0; i < lch; i++){
if (name[i].equals(Temp)) {
System.out.println("请输入您的密码");
temp = PassWord();
if (password[i].equals(temp)) {
fl = true;//声明已经登录成功
fuze=i;//账户匹配
}
}
}
if(!fl){
System.out.println("您的账号或者密码有误!");
}else{
System.out.println("账号\t密码\t用户卡号");
System.out.println(name[fuze] + "\t" + password[fuze] + "\t"
+ card[fuze]);
}
} else {
System.out.println("目前还未注册!");
}
flag = IF();
if (flag) {
continue;
}
break;
case 3://实现抽奖功能
if (fl) {
int arr[] = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 8999 + 1000);
if (arr[i] == card[fuze])
flag = true;
}
if (flag) {
System.out.println("您是幸运用户");
} else {
System.out.println("您不是幸运用户");
}
System.out.println("幸运号码是:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.print("\n");
flag = IF();
if (flag) {
continue;
}
break;
} else {
System.out.println("您还没有登录成功!请重新选择");
flag = true;
continue;
}
default:
System.out.println("没有这个选择!请重新选择");
flag = true;
continue;
}
}
;
System.out.println("欢迎下次光临黑心商铺!");
}
public static boolean IF() {//循环开关
boolean flag;
Scanner ob = new Scanner(System.in);
System.out.println("是否继续y/n");
String Flag = ob.next();
if ("y".equals(Flag)) {
flag = true;
} else {
flag = false;
}
return flag;
}
public static int ReInt() {//整数输入函数
Scanner ob = new Scanner(System.in);
boolean flag = false;
int num = 0;
String skr;
while (!flag) {
flag = ob.hasNextInt();
if (flag) {
num = ob.nextInt();
} else {
skr = ob.next();
System.out.println("您输入的" + skr + "不符合要求,请重新输入");
}
}
return num;
}
public static String PassWord() {//密码输入函数
Scanner ob = new Scanner(System.in);
boolean flag = false;
String skr = null;
while (!flag) {
skr = ob.next();
flag = true;
char ch[] = new char[skr.length()];
for (int i = 0; i < skr.length(); i++) {
ch[i] = skr.charAt(i);
if (ch[i] != '0' && ch[i] != '1' && ch[i] != '2'
&& ch[i] != '3' && ch[i] != '4' && ch[i] != '5'
&& ch[i] != '6' && ch[i] != '7' && ch[i] != '8'
&& ch[i] != '9') {
flag = false;
}
}
if (!flag) {
System.out.println("请输入数字密码!");
}
if (flag) {
if (skr.length() != 6) {
System.out.println("请输入6位数字密码!");
flag = false;
continue;
}
skr = String.valueOf(ch);
}
}
return skr;
}
}
值得注意的是由于我相当的懒,当发现没排除前面相同用户名的问题时候大部分写完了就懒得改了,造成同用户名可以出现多个密码,实现排除方法还是遍历,想改的自己改下罢(我不改悔罢!)