当前位置: 首页 > 知识库问答 >
问题:

Java登录系统不工作;读取第一个用户,但无法解析第二个或下一个用户

翁鸿远
2023-03-14

我使用数组制作了一个登录系统。我制作了单独的数组来存储用户和管理员(存储在用户中的用户名和存储在usersPswd和adminsPswd中的管理员和密码)

static public String users[] = new String[10];
static public String usersPswd[] = new String[10];
static public String admins[] = new String[10];
static public String adminsPswd[] = new String[10];

我还创建了两个变量,每次创建一个用户时,这些变量都会递增,以将用户存储在正确的索引中,以及与登录状态相对应的状态字符串

static public int userTrackerCount = 0;
static public int adminTrackerCount = 0;
static public String status = "";

每次运行register user方法时,我要登录的是将索引计数处的用户设置为用户名,将索引计数处的userspswd设置为密码(假设用户名和密码在从scanner输入运行此代码之前具有值):

users[uCount] = username;
usersPassword[uCount] = password;

或注册管理员:

admins[count] = username;
adminsPassword[count] = password;

这是我的登录方法:

public void login(String username, String password, String hierarchy) {
    if ("admin".equals(status) || "user".equals(status)) {
        System.out.println("You are already logged in");
        return;
    } else {
        while ("".equals(status)) {
            if (hierarchy.equals("admin")) {
                for (int i = 0; i < admins.length; i++) {
                    if (username.equals(admins[i])) {
                        for (int a = 0; a < adminsPassword.length; a++) {
                            if (password.equals(adminsPassword[i])) {
                                System.out.println("You have successfully 
logged in!");
                                status = "admin";
                                currentUserIndex = i;
                                return;
                            } else {
                                System.out.println("Wrong password");
                                return;
                            }
                        }
                    } else {
                        System.out.println("Admin not recognized");
                        return;
                    }
                }
            } else if (hierarchy.equals("user")) {
                for (int i = 0; i < users.length; i++) {
                    if (username.equals(users[i])) {
                        for (int a = 0; a < usersPassword.length; a++) {
                            if (password.equals(usersPassword[i])) {
                                System.out.println("You have successfully 
logged in!");
                                status = "user";
                                currentUserIndex = i;
                                return;
                            } else {
                                System.out.println("Wrong password");
                                return;
                            }
                        }
                    } else {
                        System.out.println("User not recognized");
                        return;
                    }
                }
            }

        }
    }

编辑:我还有一个注销方法,可以将状态设置回“”并且在登录到每个用户后运行此方法,例如登录注销登录(再次)

当我在注册两个用户后运行登录方法时,第一个用户已登录,但无法解析第二个用户(运行消息“用户无法识别”)。这很奇怪,因为我在注册用户后检查了用户和usersPswd数组,并且用户名和密码都在那里。请帮助解决这个问题。如果您想查看更多代码,我可能无法提供(因为这是针对最终项目的,并且有一个剽窃检查器)

共有1个答案

曾新
2023-03-14

您应该学习如何使用调试器,它将对您有所帮助。

此代码块中存在问题:

 1 for (int i = 0; i < users.length; i++) {
 2   if (username.equals(users[i])) {
 3     for (int a = 0; a < usersPassword.length; a++) {
 4       if (password.equals(usersPassword[i])) {
 5         System.out.println("You have successfully logged in!");
 6         status = "user";
 7         currentUserIndex = i;
 8         return;
 9       } else {
10         System.out.println("Wrong password");
11         return;
12       }
13     }
14   } else {
15     System.out.println("User not recognized");
16     return;
17   }
18 }

当第二个用户调用login()并且它是第2行的第一个循环条件时,将返回false(第二个用户的名称与第一个用户不同)。因此,将调用第14行的其他内容。

要更正解决方案,可以删除第14行的else,并在for循环后添加if块:

//no changes before
} else if (hierarchy.equals("user")) {
    for (int i = 0; i < users.length; i++) {
        if (username.equals(users[i])) {
            for (int a = 0; a < usersPassword.length; a++) {
                if (password.equals(usersPassword[i])) {
                    System.out.println("You have successfully logged in!");
                    status = "user";
                    currentUserIndex = i;
                    return;
                } else {
                    System.out.println("Wrong password");
                    return;
                }
            }
        }
    }
    if (!status.equals("user")) {
        System.out.println("User not recognized");
        return;
    }
}
//no changes after
 类似资料:
  • 特莫拉。png没有显示。 图片出现在我的代码中: 颤振抛出的错误: 资产图像/TMORA。png不存在。尝试创建文件或修复文件路径。dart(资产不存在)[51,8] 不过,这一形象确实存在。当我点击资产/图像文件夹时,我可以看到它 我相信问题源于我的yaml文件(如下所示) 完整的代码(将TMORA.png行注释掉以删除错误)出现在Github上 注意:我有两个名为images的文件夹。一个是p

  • 问题内容: 我是Scrapy的新手,正在从事刮擦练习,并且正在使用CrawlSpider。尽管Scrapy框架运行良好并且遵循相关链接,但我似乎无法使CrawlSpider抓取第一个链接(主页/登录页面)。相反,它直接刮取规则确定的链接,但不刮取链接所在的登录页面。我不知道如何解决此问题,因为不建议覆盖CrawlSpider的parse方法。修改follow = True / False也不会产生

  • 部署项目后,当客户机第一次向TestServlet发送请求时,server会创建TestServlet对象,然后调用第一个init()方法(init(ServletConfig config))。然后JVM检查TestServlet中的第一个init()方法,因为它不可用,然后它检查超级类HttpServlet,第一个init方法也不可用,然后JVM检查HttpServlet的超级类,即Gener

  • 实际上,我的任务是在同一个包中创建JavaBean类,并将它们用于JSP(java服务器页面)。 下面是我在做什么。 软件包名称:mypack*第一类名称:UserBean.java*(包含所有getter和setters方法)第二类名称:Databean.java(包含与数据库交互的方法) d:\java: jdk1.5和tomcat,都在这个文件夹中。 UserBean.java:我想使用这个

  • 问题内容: 我正在尝试编写这样的日历功能 是整数(1、2、3 …),$ day是一天(Sun,Mon,…)或数字,以较容易的一个为准。方向有些混乱,因为它进行了不同的计算。 举个例子 它使用默认值,并获得5月的第一个星期日,即2009-05-03。如果我们打电话 ,它将返回5月的第二个最后一个星期日,即2009-05-24。 问题答案: 也许可以使其更快。。。 代码非常有趣。 请注意,前进1表示反

  • 我正在尝试从我的模块中的应用程序属性中读取第二个数据库连接信息。我的配置模块应该读取值。 当我在控制器内部调用DatabaseConfiguration时,它会给出一个错误。 我找到了一些解决方案,比如这个 Spring boot无法解析字符串中的占位符 我实现了它。 http://maven.apache.org/xsd/maven-4.0.0.xsd" 谢谢