[英]Java HashMap and Iterator - How to know if value is the same as user
我正在學習如何使用哈希圖。 我正在嘗試構建一個 ATM 程序,如果用戶正確輸入他們的卡號和密碼,則允許用戶登錄。 下面是我的代碼。
import java.util.*;
import java.util.Scanner;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
// write your code here
Map<String, String> map = new HashMap<>();
map.put("123456789", "123456");
map.put("987654321", "654321");
Scanner in = new Scanner(System.in);
System.out.println("Enter Your Card Number");
String card = in.next();
System.out.println("Enter Your Pin Number");
String pin = in.next();
String everything = card + "=" + pin;
Iterator i = map.entrySet().iterator();
while(i.hasNext()) {
String s = (String) i.next();
if(everything == i.next()) {
System.out.println("Congratulations for logging in");
} else {
System.out.println(i.next());
System.out.println("Wrong Card Number Or Pin");
System.out.println("Enter Your Card Number");
card = in.next();
System.out.println("Enter Your Pin Number");
pin = in.next();
everything = card + "=" + pin;
}
}
}
}
我的問題是如何檢查用戶輸入是否與我在地圖中輸入的值之一相同? 謝謝你。
Map#get
根據經驗,如果您正在遍歷地圖以查找特定條目,那么您做錯了。 地圖的全部意義在於您可以直接查找密鑰。 調用Map#get
,傳遞鍵,取回映射到該鍵的值。
我假設地圖從卡號映射到 PIN。 在此基礎上:
boolean valid = false;
Scanner in = new Scanner(System.in);
while (!valid) {
System.out.println("Enter Your Card Number");
String card = in.next();
System.out.println("Enter Your Pin Number");
String pin = in.next();
String actualPin = map.get(card);
valid = pin.equals(actualPin);
if (!valid) {
// card number not found
// or pins do not match
System.out.println("Try again");
}
}
順便說一句,您應該添加更多代碼來檢查null
。 如果用戶提交的卡號當前在我們的Map
中找不到,則返回null
。
我想你可能有點想多了。 您需要做的只是首先檢查卡號(密鑰)是否在哈希圖中,如果是,則密碼是否匹配。
if (map.containsKey(card) && map.get(card).equals(pin)) {
System.out.println("Congratulations for logging in");
} else {
System.out.println("I'm sorry your card number or pin was incorrect");
}
這應該對您有用,我建議您閱讀有關 HashMaps 的文檔以更好地了解它們: https ://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.