2017-02-07 5 views
0

私がしたいことは、4人のユーザー(それぞれが異なるパスワードに関連付けられている)でこの簡単な「ログイン」を行い、ユーザーに「許可」した後、それぞれが「情報」配列(例えば、User1は4つの要素すべてを見ることができ、User2は3つしか見ることができず、User3は2つの要素を見ることができ、User4は1つしか見ることができない)。別の配列の内容に応じて配列から異なる要素を出力するにはどうすればいいですか?

これは私のメインクラスです:

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"}; 
    } 

私の質問があり、私は応じてA、B、Cおよび/またはDをプリントアウトしない方法それはUser1やUser2などのですか?

+0

のように見えるのだろうか? 'access()'メソッドや 'main()'メソッド内では? – nullpointer

+0

main()メソッド内。 –

+1

'Map'はより良いデータ構造になります – MadProgrammer

答えて

0

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 
} 
0

コメントに記載されているように、よりオブジェクト指向のアプローチを使用できます。 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を返すと、ユーザー名またはパスワードが正しくありません。それ以外の場合はinfoを含むUserDetailsオブジェクトが返されます。 mainメソッドで

コードを使用すると、A、B..etcを印刷したいん

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"); 
} 
+0

メインメソッド 'UserService.UserDetails details = userService。 checkCredentials(username、password); 'は、メインクラスで変数username(またはpassword)を見つけることができないと言います。 –

+0

'//...read from cmd'コマンドラインから' String username; 'と' String password; 'を受け取ったコードをコピーします –

関連する問題