【问题标题】:How to print out different elements from an array depending on the content of another array?如何根据另一个数组的内容从一个数组中打印出不同的元素?
【发布时间】:2017-02-07 03:55:07
【问题描述】:

所以,我想做的是让这个简单的“登录”有 4 个用户(每个用户与不同的密码相关联),在“授予”用户访问权限后,每个用户都可以从“信息”中看到不同的元素数组(例如,User1 可以看到所有四个元素,User2 只能看到三个,User3 可以看到 2 个元素,User4 只能看到一个)。

这是我的主要课程:

import java.util.Scanner;

public class Data {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        String username;
        String password;

        System.out.println("LOG IN");

        System.out.println("User: ");
        username = input.nextLine();

        System.out.println("Password: ");
        password = input.nextLine();

        Users check = new Users(username, password);

        if (check.access())
        System.out.println("WELCOME");
        else
        System.out.println("ACCESS DENIED");
    }
}

这是我的用户类:

public class Users {
    private String username;
    private String password;        
    private String[][] accounts = {{"user1","pass1"},{"user2","pass2"},
{"user3","pass3"},{"user4","pass4"}};


    public Users (String user, String pass){
        username = user;
        password = pass;
    }

    public boolean access() {
        if ((username.equals(accounts[0][0])) && (password.equals(accounts[0][1])))
            return true;  
        if ((username.equals(accounts[1][0])) && (password.equals(accounts[1][1])))
            return true;
        if ((username.equals(accounts[2][0])) && (password.equals(accounts[2][1])))
            return true;
        if ((username.equals(accounts[3][0])) && (password.equals(accounts[3][1])))
            return true;
        else
            return false;
        }
        public static String [] info = {"A", "B", "C", "D"};
    }

我的问题是,如何根据 User1 或 User2 等打印出 A、B、C 和/或 D?

【问题讨论】:

  • 您想在哪里打印 A、B..等?在access() 方法或main() 方法内?
  • 在 main() 方法中。
  • Map 会是更好的数据结构
  • 我同意@MadProgrammer,但 OP 可能仅限于使用数组(可能是一项任务)
  • @paisanco 上下文为王:P

标签: java arrays if-statement


【解决方案1】:

一种选择是将整数列表添加到Users 类:

List<Integer> infoRights;

此列表可以存储给定用户有权访问的info[] 数组的索引。在这种情况下,这些整数值几乎就像info[] 数组中的键一样。

public class Users {
    private static String [] info = {"A", "B", "C", "D"};
    private List<Integer> infoRights;

    public void printInfo() {
        String info = "";
        for (int right : infoRights) {
            info += right;
        }
        System.out.println(info);
    }

    // getters and setters to manage infoRights
}

【讨论】:

    【解决方案2】:

    您可以尝试使用更多面向对象的方法,如 cmets 中所述。创建UserService,它将检查用户凭据并在凭据正确时返回用户信息。请参阅下面的代码作为粗略示例:

    import java.util.HashMap;
    import java.util.Map;
    
    public class UserService {
    
        private static class UserDetails {
            private final String password;
            private final String info;
    
            private UserDetails(String password, String info) {
                this.password = password;
                this.info = info;
            }
    
            public String getInfo() {
                return info;
            }
    
            public String getPassword() {
                return password;
            }
        }
    
        private final Map<String, UserDetails> userDetails = new HashMap<>();
    
        public UserService() {
            userDetails.put("user1", new UserDetails("pass1", "A"));
            userDetails.put("user2", new UserDetails("pass2", "B"));
            userDetails.put("user3", new UserDetails("pass3", "C"));
            userDetails.put("user4", new UserDetails("pass4", "D"));
        }
    
        public UserDetails checkCredentials(String username, String password) {
            UserDetails details = userDetails.get(username);
            if (details == null || !details.password.equals(password)) {
                return null;
            } else {
                return details;
            }
        }
    }
    

    您将使用checkCredentials 方法检查用户凭据是否正确。如果返回 null,则说明用户名或密码不正确。否则将返回包含infoUserDetails 对象。

    main 方法中的代码如下所示

    final UserService userService = new UserService();
    //...read from cmd
    UserService.UserDetails details = userService.checkCredentials(username, password);
    if (details == null) {
        System.out.println("ACCESS DENIED");
    } else {
        System.out.println("WELCOME");
    }
    

    【讨论】:

    • 从主方法UserService.UserDetails details = userService.checkCredentials(username, password);,它说在主类中找不到变量用户名(或密码)。
    • //...read from cmd 复制从命令行接收String username;String password; 的代码
    猜你喜欢
    • 1970-01-01
    • 2022-11-28
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2023-01-13
    相关资源
    最近更新 更多