Java HashMap 和 Iterator - 如何知道值是否与用户相同

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

我想您可能想多了。您需要做的就是首先检查卡号(密钥)是否在散列图中,如果是,则 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");
}

这应该适合您,我建议您阅读有关 HashMap 的文档以更好地了解它们:https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html