为什么我写了用户名和密码存储到数组的方法,但方法好像不执行,到检测用户名是否重复的方法时,检测不到,继而导致登录显示用户名不存在,是不是当注册完成时,程序直接结束?求大牛帮忙,小弟感激不尽! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guang131
V2EX    Java

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

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

    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 没有啊,我都写进方法了
    tL28Qt7jS56Yy8F9
        5
    tL28Qt7jS56Yy8F9  
       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     Solana     3633 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 00:48 PVG 08:48 LAX 17:48 JFK 20:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86