Java HashMap和Iterator语言 - 如何知道value是否与user相同



我正在学习如何使用hashmap。我试图建立一个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中迭代寻找一个特定的条目,你就做错了。map的全部意义在于你可以直接查找键。调用Map#get,传递键,返回映射到该键的值

我假设Map从卡号映射到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

我想你可能有点想多了。您所需要做的只是首先检查卡号(密钥)是否在哈希映射中,如果是,如果pin匹配。

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

最新更新