V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guang131
V2EX  ›  Java

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

  •  
  •   guang131 · 2018-04-06 22:35:38 +08:00 · 2977 次点击
    这是一个创建于 2455 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    碰到这样的问题,首先要想想,判断用户已存在的代码是不是对的。没有单元测试代码的话,至少可以写个简单的调用看看结果?
    guang131
        8
    guang131  
    OP
       2018-04-06 23:06:18 +08:00
    @honeycomb 您好,我当时复制过来的时候格式是代码格式,可是一发布就变成这样了,能教教我怎么改吗
    guang131
        9
    guang131  
    OP
       2018-04-06 23:06:51 +08:00
    @kanezeng 好的,谢谢
    Allianzcortex
        10
    Allianzcortex  
       2018-04-06 23:21:32 +08:00
    没看太懂...但 @kanezeng 检测字符串相等的话是用 .equal() 方法比较好,== 并不是它所显示的那样,实际上是用来" compares the reference of an object "
    Allianzcortex
        11
    Allianzcortex  
       2018-04-06 23:23:04 +08:00
    @Allianzcortex fix typo .equals() 方法
    johnj
        12
    johnj  
       2018-04-06 23:23:29 +08:00
    两个字符串比较 用 str1.equals(str2) 不要用 str1==str2
    1762628386
        13
    1762628386  
       2018-04-07 00:24:09 +08:00
    终于不是黑 php 了
    Fri
        14
    Fri  
       2018-04-07 00:25:11 +08:00
    addUserCon 方法应该传入参数“ String[] users, String[] pswds ”
    Fri
        15
    Fri  
       2018-04-07 00:48:35 +08:00
    userState 和 logIn 方法中的“==”改为“.equals ”方法,判断是否相等;另外应在判断条件中加入非空判断。
    yu099
        16
    yu099  
       2018-04-07 07:36:34 +08:00 via Android
    打开文件有没有忘记关
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5300 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:21 · PVG 17:21 · LAX 01:21 · JFK 04:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.