为什么我写了用户名和密码存储到数组的方法,但方法好像不执行,到检测用户名是否重复的方法时,检测不到,继而导致登录显示用户名不存在,是不是当注册完成时,程序直接结束?求大牛帮忙,小弟感激不尽!

2018-04-06 22:35:38 +08:00
 guang131

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.退出登录"); } }

2973 次点击
所在节点    Java
16 条回复
guang131
2018-04-06 22:36:34 +08:00
复制粘贴这么难看吗?
pexcn
2018-04-06 22:40:48 +08:00
Kingsman
2018-04-06 22:40:50 +08:00
代码放到代码块里呗
guang131
2018-04-06 22:46:44 +08:00
@Kingsman 没有啊,我都写进方法了
ilgharkus
2018-04-06 22:47:54 +08:00
复制粘贴的有点难看啊。。。
v2ex 无法使用 Markdown 吗
这么粘贴过来读码很难啊。。。
honeycomb
2018-04-06 22:48:10 +08:00
@guang131 他是叫你发帖子的时候用 markdown 的代码块语法,现在展现成这样,你是他的话,会有脾气给你看代码?
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; }

碰到这样的问题,首先要想想,判断用户已存在的代码是不是对的。没有单元测试代码的话,至少可以写个简单的调用看看结果?
guang131
2018-04-06 23:06:18 +08:00
@honeycomb 您好,我当时复制过来的时候格式是代码格式,可是一发布就变成这样了,能教教我怎么改吗
guang131
2018-04-06 23:06:51 +08:00
@kanezeng 好的,谢谢
Allianzcortex
2018-04-06 23:21:32 +08:00
没看太懂...但 @kanezeng 检测字符串相等的话是用 .equal() 方法比较好,== 并不是它所显示的那样,实际上是用来" compares the reference of an object "
Allianzcortex
2018-04-06 23:23:04 +08:00
@Allianzcortex fix typo .equals() 方法
johnj
2018-04-06 23:23:29 +08:00
两个字符串比较 用 str1.equals(str2) 不要用 str1==str2
1762628386
2018-04-07 00:24:09 +08:00
终于不是黑 php 了
Fri
2018-04-07 00:25:11 +08:00
addUserCon 方法应该传入参数“ String[] users, String[] pswds ”
Fri
2018-04-07 00:48:35 +08:00
userState 和 logIn 方法中的“==”改为“.equals ”方法,判断是否相等;另外应在判断条件中加入非空判断。
yu099
2018-04-07 07:36:34 +08:00
打开文件有没有忘记关

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/444757

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX