要求:1.能够实现伪注册(变量储存)
2.实现登陆(注册检测)
3.实现摸奖(登录检测)
思路:由于是新手练手只考虑条件检测和循环的使用,当你没有注册的时候,你不能登陆,当你开始摸奖时,你必须已经登陆,并且每次选择完后你能够选择是否回到主页面,如果输入的不是正确的选项,你必须返回正确选项,所以要用到循环和判断。在明白了大致思路后你需要知道基本的键盘输入要依靠类scanner。这个对象需要实例化(类和对象内容)。之后你需要判断你的输入密码必须是6位数字
那么可以得到初步的代码如下:
import java.util.Scanner;
public class shop {
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 = "";
int temp;
String Temp;
int password = 000000;
int button;
int card = 0000;
AAA: while (flag == true){
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
flag = false;
button = ob.nextInt();
switch (button) {
case 1:
if (!Flag) {
System.out.println("请输入您的账户名:");
name = ob.next();
System.out.println("请输入您的密码:");
password = ob.nextInt();
while (99999 > password || password > 1000000) {
System.out.println("请输入开头不为0的6位密码");
password = ob.nextInt();
}
card = (int) (Math.random() * 9000 + 1000);
System.out.println("账号\t密码\t用户卡号");
System.out.println(name + "\t" + password + "\t" + card);
Flag = true;
flag = IF();
if (flag) {
continue AAA;
}
break;
} else {
System.out.println("您已经注册过了!请重新选择");
flag = true;
continue AAA;
}
case 2:
if (Flag) {
System.out.println("请输入您的账号");
Temp = ob.next();
if (name.equals(Temp)) {
System.out.println("请输入您的密码");
temp = ob.nextInt();
if (temp == password) {
System.out.println("登录成功!");
System.out.println("账号\t密码\t用户卡号");
System.out.println(name + "\t" + password + "\t"
+ card);
fl = true;
} else {
System.out.println("密码错误!");
}
} else {
System.out.println("账号错误!");
}
flag = IF();
if (flag) {
continue AAA;
}
break;
} else {
System.out.println("您还没有注册!请重新选择");
flag = true;
continue AAA;
}
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)
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 AAA;
}
break;
} else {
System.out.println("您还没有登录成功!请重新选择");
flag = true;
continue AAA;
}
default:
System.out.println("没有这个选择!请重新选择");
flag = true;
continue AAA;
}
} ;
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;
}
}
之后我们发现,我们并没有对输入进行检测,而且存在一个非常大缺点:你不能输入开头为0的密码,这是非常不自由的,这是因为你输入的6位数是靠着数字比较确定的,是一个六位数,解决的方法是改为String输入,然后判断是不是数字但是这里还有一个问题,那就是如果用hasnextint的话后面Integer.valueOf(object.next())他会自动去掉开头的0;解决办法这里提供一种,那就是用char数组去做一个过渡处理使开头的0可以保存到字符串里,同时方便数字处理
下面是改动后的代码:
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 = "";
String temp;
String Temp;
String password = "";
int button;
int card = 0000;
while (flag == true) {
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.抽奖");
flag = false;
button = ReInt();
switch (button) {
case 1:
if (!Flag) {
System.out.println("请输入您的账户名:");
name = ob.next();
System.out.println("请输入您的密码:");
password = PassWord();
card = (int) (Math.random() * 9000 + 1000);
System.out.println("账号\t密码\t用户卡号");
System.out.println(name + "\t" + password + "\t" + card);
Flag = true;
flag = IF();
if (flag) {
continue;
}
break;
} else {
System.out.println("您已经注册过了!请重新选择");
flag = true;
continue;
}
case 2:
if (Flag) {
System.out.println("请输入您的账号");
Temp = ob.next();
if (name.equals(Temp)) {
System.out.println("请输入您的密码");
temp = PassWord();
if (temp.equals(password)) {
System.out.println("登录成功!");
System.out.println("账号\t密码\t用户卡号");
System.out.println(name + "\t" + password + "\t"
+ card);
fl = true;
} else {
System.out.println("密码错误!");
}
} else {
System.out.println("账号错误!");
}
flag = IF();
if (flag) {
continue;
}
break;
} else {
System.out.println("您还没有注册!请重新选择");
flag = true;
continue;
}
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)
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;
}
}
这里其实还可以用数组替换开始的用户,同时登陆采用遍历的方式(但是因为前提说好了不用数组和数据库,更别说框架,那就不用算了)
初学java到多重循环为止的朋友们可以拿这个来练练手,总结总结经验,学到后面的话可以对这个代码进行大量简化,但是,所谓思而不学则殆,如果光去想而不去学(或者没学到)反而产生疑惑,对学习有害,因此建议各位学习到SSM后回来补强代码
.