Java 比较两个登录数组

Java Comparing Two Arrays for Login

我在比较用户名和密码数组时遇到问题。我花了几个小时试图找到解决方案,尝试了很多东西但无法取得成功。

每当我尝试输入用户名 admin 和密码输入 123 时,它都会打印 "Login Success!正在加载菜单..." 但是当我尝试将用户名输入为 john 并将密码输入为 512 作为测试值时, 它打印成功登录消息

但是用户名输入 john 和密码输入 123 打印出无效消息。我无法解决这里发生的问题。

我的目的是比较两个数组是否登录成功。例如:

编辑:我也尝试了多种方式的 .equals() 方法,但没有奏效。

    public static boolean UserLogin() {
        String[] username = {"admin", "john", "alina"};
        String[] password = {"123", "456", "789"};
        String user, pass;
        boolean isValid = false;

        Scanner input = new Scanner(System.in);
        System.out.println("Enter your username: ");
        user = input.nextLine();

        System.out.println("Enter your password: ");
        pass = input.nextLine();

        for (int i = 0; i < username.length; i++) {
            if (username[i].indexOf(user) == password[i].indexOf(pass)) {
                isValid = true;
                System.out.println("Login Success! Loading the menu...");
                break;
            }
            else {
                System.out.println("Invalid username or password, please contact your Database Administrator for " +
                        "support!");
                break;
            }
        }

        return isValid;
    }

根据您的逻辑,您使用的是 indexOf,通常 return 匹配索引或 -1。 根据您在尝试 jhon 和 512

时的情况

username[i].indexOf(jhon) 当索引为 0 时 returning -1 当索引为 0

时,password[i].indexOf(512) 为 returning -1

它们都是相等的,所以您可以登录。

我建议您使用 username[i].equals(user) 因为这是匹配字符串的正确方法。即使用户输入 space,请确保您使用 username[i].equals(user.trim());

package days.temp;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println(UserLogin());
    }

    public static boolean UserLogin() {
        String[] username = {"admin", "john", "alina"};
        String[] password = {"123", "456", "789"};
        String user, pass;
        boolean isValid = false;

        Scanner input = new Scanner(System.in);
        System.out.println("Enter your username: ");
        user = input.nextLine();

        System.out.println("Enter your password: ");
        pass = input.nextLine();

        for (int i = 0; i < username.length; i++) {
            if(username[i].equals(user) && password[i].equals(pass)){
                isValid = true;
                System.out.println("Login Success! Loading the menu...");
                break;
            }
        }

        return isValid;
    }
}

您可能需要为此使用地图。

  • 如果用户不存在,地图将 return null,因此检查将失败。
  • 否则它将return用户的密码并且密码检查将失败。
  • Returns 在显示结果消息后立即生效。

static Map<String, String> users = new HashMap<>();
    
String[] username = { "admin", "john", "alina" };
String[] password = { "123", "456", "789" };
// build the map.
for (int i = 0; i < username.length; i++) {
    users.put(username[i], password[i]);
}
userLogin();

    
public static boolean userLogin() { 
    Scanner input = new Scanner(System.in);
    System.out.println("Enter your username: ");
    String user = input.nextLine();
    
    System.out.println("Enter your password: ");
    String pass = input.nextLine();
    
    String password = users.get(user);
    if (pass.equals(password)) {
        System.out.println("Login Success! Loading the menu...");
        return true;
    }
    System.out.println(
            "Invalid username or password, please contact your Database Administrator for "
                    + "support!");
    
    return false;
}