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
我正在学习如何使用哈希图。我正在尝试构建一个 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