public class Demo { static Scanner input=new Scanner(System.in); static String[]users=new String[2];//存储用户名 static String[]pswds=new String[2];//存储用户密码 static int userCon =0;//记录用户真实个数,初始为 0,每次注册成功+1 public static void main(String[] args) { test: while(true){ show();//调用一次主菜单 int i=input.nextInt();//调用一次键盘录入 switch(i){//分别调用相应的方法 case 1: addUser();//用户注册方法调用 continue; case 2: logIn();//用户登陆方法调用 continue; case 3: setPswd();//忘记密码方法调用 continue; case 4: System.out.println("系统已退出"); break test; default: System.out.println("输入错误,请重新输入"); break; } } } public static void addUser() { System.out.println("=====账号注册====="); System.out.print("请输入要注册的用户名:"); String user=input.next();//存储录入的用户名 System.out.print("请输入要注册的密码:"); String password=input.next();//存储录入的密码 if(userState(user)){ System.out.println("用户名已经存在"); }else{//可以注册 //判断数组空间是否足够,是否需要扩容 if(userCon()){//检测数组是否有空余空间的结果 addUserCon();//如果需要扩容,那么调用扩容方法 } users[userCon]=user;//用户名和密码都写入数组中 pswds[userCon]=password; userCon++;//真实用户数自增 System.out.println("恭喜,“"+user+"”注册成功"); } } public static boolean userState(String user){//接收要检测的用户名,已存在该用户返回 true,没有返回 false for (String i : pswds) { if(i==user)//代表此时有该用户 return true; } return false; } public static void logIn() { System.out.println("=====账号登录====="); System.out.print("请输入用户名:"); String user=input.next(); //判断用户名是否存在,不存在给出提示,退出此方法,进入主菜单 if(userState(user)){//如果存在用户名,那么进行用户名( user )和密码( password )的校验 System.out.print("请输入密码:"); String password=input.next(); int i = 0;//记录用户名在 users 数组中的下标 for (; i < users.length; i++) { if(users[i]==user){//数组下标中的用户名跟输入的用户名一致的话,执行密码校验方法 break; } //用户名和密码的索引是一起存放的,所以下标相同 if(pswds[i]==password){//如果密码一致的话,输出 System.out.println("欢迎"+user+"登录"); }else {//密码不一致,输出 System.out.println("密码错误"); } } }else{ System.out.println("用户名不存在,请先注册"); } } public static void setPswd() { System.out.println("=====忘记密码====="); } public static void addUserCon() {//调用数组方法进行扩容 //扩容时要注意需扩容两个,只扩容一个的话显示数组空间异常 users=Arrays.copyOf(users, users.length2); pswds=Arrays.copyOf(pswds, pswds.length2); System.out.println("扩容完毕,可以继续注册"); } public static boolean userCon(){//校验是否有空余,是否需要扩容 需要返回 true,否则返回 false if(users.length>userCon){//如果用户存储数组长度大于真实用户数,不需要扩容,反之需要 return false; }else{ return true; } } public static void show(){//主菜单方法 System.out.println("========欢迎光临========"); System.out.println("**********************"); System.out.println(" 请按照提示进行操作 "); System.out.println("1.注册账号"); System.out.println("2.登录账号"); System.out.println("3.忘记密码"); System.out.println("4.退出登录"); } }
1
guang131 OP 复制粘贴这么难看吗?
|
2
pexcn 2018-04-06 22:40:48 +08:00 via Android
…
|
3
Kingsman 2018-04-06 22:40:50 +08:00 via Android
代码放到代码块里呗
|
5
ilgharkus 2018-04-06 22:47:54 +08:00
复制粘贴的有点难看啊。。。
v2ex 无法使用 Markdown 吗 这么粘贴过来读码很难啊。。。 |
6
honeycomb 2018-04-06 22:48:10 +08:00
@guang131 他是叫你发帖子的时候用 markdown 的代码块语法,现在展现成这样,你是他的话,会有脾气给你看代码?
|
7
kanezeng 2018-04-06 22:48:51 +08:00
public static boolean userState(String user){//接收要检测的用户名,已存在该用户返回 true,没有返回 false for (String i : pswds) { if(i==user)//代表此时有该用户 return true; } return false; }
碰到这样的问题,首先要想想,判断用户已存在的代码是不是对的。没有单元测试代码的话,至少可以写个简单的调用看看结果? |
10
Allianzcortex 2018-04-06 23:21:32 +08:00
没看太懂...但 @kanezeng 检测字符串相等的话是用 .equal() 方法比较好,== 并不是它所显示的那样,实际上是用来" compares the reference of an object "
|
11
Allianzcortex 2018-04-06 23:23:04 +08:00
@Allianzcortex fix typo .equals() 方法
|
12
johnj 2018-04-06 23:23:29 +08:00
两个字符串比较 用 str1.equals(str2) 不要用 str1==str2
|
13
1762628386 2018-04-07 00:24:09 +08:00
终于不是黑 php 了
|
14
Fri 2018-04-07 00:25:11 +08:00
addUserCon 方法应该传入参数“ String[] users, String[] pswds ”
|
15
Fri 2018-04-07 00:48:35 +08:00
userState 和 logIn 方法中的“==”改为“.equals ”方法,判断是否相等;另外应在判断条件中加入非空判断。
|
16
yu099 2018-04-07 07:36:34 +08:00 via Android
打开文件有没有忘记关
|