Java 比较两个登录数组
Java Comparing Two Arrays for Login
我在比较用户名和密码数组时遇到问题。我花了几个小时试图找到解决方案,尝试了很多东西但无法取得成功。
每当我尝试输入用户名 admin 和密码输入 123 时,它都会打印 "Login Success!正在加载菜单..." 但是当我尝试将用户名输入为 john 并将密码输入为 512 作为测试值时, 它打印成功登录消息。
但是用户名输入 john 和密码输入 123 打印出无效消息。我无法解决这里发生的问题。
我的目的是比较两个数组是否登录成功。例如:
- 用户名:admin,密码:123
- 用户名:john,密码:456
- 用户名:alina,密码:789
编辑:我也尝试了多种方式的 .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;
}
我在比较用户名和密码数组时遇到问题。我花了几个小时试图找到解决方案,尝试了很多东西但无法取得成功。
每当我尝试输入用户名 admin 和密码输入 123 时,它都会打印 "Login Success!正在加载菜单..." 但是当我尝试将用户名输入为 john 并将密码输入为 512 作为测试值时, 它打印成功登录消息。
但是用户名输入 john 和密码输入 123 打印出无效消息。我无法解决这里发生的问题。
我的目的是比较两个数组是否登录成功。例如:
- 用户名:admin,密码:123
- 用户名:john,密码:456
- 用户名:alina,密码:789
编辑:我也尝试了多种方式的 .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;
}