1 回答

TA貢獻1111條經驗 獲得超0個贊
我想說你被卡住的原因是將用戶名字符串映射到密碼的 HashMap 需要一個HashMap<String, String> uc,但你已經創建了一個HashMap<Integer, User> uc,這消除了使用 HashMap 的價值!如果您打算利用 java.util.HashMap 提供的“優化”——這意味著字符串被“散列”以便在數據結構中快速輕松地查找,您可以按如下方式保存 HashMap:
HashMap<Integer, User> uc = new HashMap <Integer, User>(); {
uc.put("user1", "pass1");
uc.put("user2", "pass2");
uc.put("user3", "pass3");
uc.put("user4", "pass4");
}
以這種方式,您可以按如下方式查找用戶名和密碼組合:
public boolean checkPassword(String enteredUserName, String enteredPassword)
{
String userPassword = uc.get(enteredUserName);
return enteredPassword.equals(userPassword);
}
如果您絕對必須在 HashMap 中使用“用戶”數據結構,另一種選擇是:
HashMap<Integer, User> uc = new HashMap <Integer, User>(); {
uc.put("user1", new User("user1", "pass1"));
uc.put("user2", new User ("user2", "pass2"));
uc.put("user3", new User ("user3", "pass3"));
uc.put("user4", new User ("user4", "pass4"));
}
此時獲取密碼可能如下所示:
public boolean checkPassword(String enteredUserName, String enteredPassword)
{
String userPassword = uc.get(enteredUserName).getPassword();
return enteredPassword.equals(userPassword);
}
我不確定您用來啟動的“整數”(用戶 ID?)是什么HashMap<Integer, User>-但是- 要意識到的最重要的事情是 HashMap 的目的是在表中“查找”要快得多,因為對查找值執行“哈?!焙瘮怠?/p>
如果您不打算使用“用戶 ID 整數”進行查找,那么將其存儲為 HashMap 的鍵根本沒有多大用處。
您的迭代器必須遍歷整個表才能找到用戶:
public boolean checkPassword(String enteredUserName, String enteredPassord)
{
Iterator<Entry<Integer, User>> it = uc.entrySet().iterator();
while (it.hasNext()){
//some code to validate user input against HashMap entries
User u = it.next().getValue();
if (u.getUserName().equals(enteredUserName())
return u.getPassword().equals(enteredPassword);
}
}
添加回答
舉報