在 Java 的 HashMap 中获取和打印用户输入
Getting and Printing User Inputs in HashMaps in Java
一个月前踏入Java,一直在学习。我遇到了一个问题。我需要将 N 个用户输入对 (key:value) 获取到 Java 中的 HashMap,如下面的代码所述。输入一对 key:value 后,这给了我一个 InputMismatchException。据我所知,我无法弄清楚声明的循环和将用户输入值对分配给声明的 HashMap 是否存在语法错误。如果有人能详细说明这一点,我将非常感激,希望用简单的术语,因为我是一个非常初学者。非常感谢您的关心。
public static void main (String [] arg){
HashMap<String, Integer> phonebook = new HashMap<>();
Scanner obj = new Scanner(System.in);
//N= Number of contacts to be entered by the user
int N = obj.nextInt();
//Getting N num of user inputs for names and contacts
while(N>0){
for (int i=0;i<N;i++)
{
//we need to input name and contact value pairs
//in same line
String name = obj.nextLine();
int contact = obj.nextInt();
//assigning user input key:value pairs to hashmap
phonebook.put(name, contact);
}
//setting key:value pairs to display
Set<String> keys = phonebook.keySet();
for(String i:keys)
{
System.out.println(i +"="+phonebook.get(i));
}
N--;
}
}
你总是需要在 obj.nextInt();
之后加上 obj.nextLine();
。这是因为 obj.nextInt();
只消耗数字,但是当你输入数字并按下回车键时,输入流最后还会记录一个换行符,所以接下来的 obj.nextLine();
会拾取一个空字符串,从那以后你总是差一个。这是一个事件序列示例:
- 您输入输入的数量。
- 程序将其读入变量
N
。
- 程序将剩余的空字符串读入变量
name
。
- 你输入名字。
- 程序试图将一个数字读入变量
contact
,但您输入的不是数字,因此失败。
为了您的理智,请使用一些缩进。这是您更正后的代码,缩进:
public static void main(String[] arg) {
HashMap<String, Integer> phonebook = new HashMap<>();
Scanner obj = new Scanner(System.in);
//N= Number of contacts to be entered by the user
int N = obj.nextInt();
obj.nextLine(); //consume the newline
//Getting N num of user inputs for names and contacts
while (N > 0) {
for (int i = 0; i < N; i++) {
//we need to input name and contact value pairs
//in same line
String name = obj.nextLine();
int contact = obj.nextInt();
obj.nextLine(); //consume the newline
//assigning user input key:value pairs to hashmap
phonebook.put(name, contact);
}
//setting key:value pairs to display
Set<String> keys = phonebook.keySet();
for (String i : keys) {
System.out.println(i + "=" + phonebook.get(i));
}
N--;
}
}
或者,如果您确实希望在评论中所说的同一行输入姓名和联系人,则可以替换此行:
String name = obj.nextLine();
这一行:
String name = obj.findInLine("\D+");
这只是告诉 Java 从输入流中读取数据,直到遇到数字字符。
你需要在得到N后添加一个obj.nextLine()
语句。当你在提示中输入内容时,有一个行尾字符在你按下回车后添加(\n
) . nextInt()
只读取一个数字,所以当你在 nextInt()
之后立即调用 nextLine()
时,它只会读取行尾字符 \n
,因为 nextInt()
没有把它捡起来。通过在调用 nextInt()
之后添加额外的 nextLine()
语句,您可以摆脱 \n
,程序可以正确读取值。
此代码有效:
public static void main (String [] arg){
HashMap<String, Integer> phonebook = new HashMap<>();
Scanner obj = new Scanner(System.in);
//N= Number of contacts to be entered by the user
int N = obj.nextInt();
obj.nextLine();
//Getting N num of user inputs for names and contacts
while(N>0){
for (int i=0;i<N;i++)
{
//we need to input name and contact value pairs
//in same line
String name = obj.nextLine();
int contact = obj.nextInt();
obj.nextLine();
//assigning user input key:value pairs to hashmap
phonebook.put(name, contact);
}
//setting key:value pairs to display
Set<String> keys = phonebook.keySet();
for(String i:keys)
{
System.out.println(i +"="+phonebook.get(i));
}
N--;
}
}
控制台输入和输出如下。您可能想使用 i < N - 1
而不是 i < N
,因为我只想输入 2 个联系人,但不得不添加 3 个。这可能会使用户感到困惑。
2
foo
100
bar
1000
bar=1000
foo=100
n
1000000
bar=1000
foo=100
n=1000000
一个月前踏入Java,一直在学习。我遇到了一个问题。我需要将 N 个用户输入对 (key:value) 获取到 Java 中的 HashMap,如下面的代码所述。输入一对 key:value 后,这给了我一个 InputMismatchException。据我所知,我无法弄清楚声明的循环和将用户输入值对分配给声明的 HashMap 是否存在语法错误。如果有人能详细说明这一点,我将非常感激,希望用简单的术语,因为我是一个非常初学者。非常感谢您的关心。
public static void main (String [] arg){
HashMap<String, Integer> phonebook = new HashMap<>();
Scanner obj = new Scanner(System.in);
//N= Number of contacts to be entered by the user
int N = obj.nextInt();
//Getting N num of user inputs for names and contacts
while(N>0){
for (int i=0;i<N;i++)
{
//we need to input name and contact value pairs
//in same line
String name = obj.nextLine();
int contact = obj.nextInt();
//assigning user input key:value pairs to hashmap
phonebook.put(name, contact);
}
//setting key:value pairs to display
Set<String> keys = phonebook.keySet();
for(String i:keys)
{
System.out.println(i +"="+phonebook.get(i));
}
N--;
}
}
你总是需要在 obj.nextInt();
之后加上 obj.nextLine();
。这是因为 obj.nextInt();
只消耗数字,但是当你输入数字并按下回车键时,输入流最后还会记录一个换行符,所以接下来的 obj.nextLine();
会拾取一个空字符串,从那以后你总是差一个。这是一个事件序列示例:
- 您输入输入的数量。
- 程序将其读入变量
N
。 - 程序将剩余的空字符串读入变量
name
。 - 你输入名字。
- 程序试图将一个数字读入变量
contact
,但您输入的不是数字,因此失败。
为了您的理智,请使用一些缩进。这是您更正后的代码,缩进:
public static void main(String[] arg) {
HashMap<String, Integer> phonebook = new HashMap<>();
Scanner obj = new Scanner(System.in);
//N= Number of contacts to be entered by the user
int N = obj.nextInt();
obj.nextLine(); //consume the newline
//Getting N num of user inputs for names and contacts
while (N > 0) {
for (int i = 0; i < N; i++) {
//we need to input name and contact value pairs
//in same line
String name = obj.nextLine();
int contact = obj.nextInt();
obj.nextLine(); //consume the newline
//assigning user input key:value pairs to hashmap
phonebook.put(name, contact);
}
//setting key:value pairs to display
Set<String> keys = phonebook.keySet();
for (String i : keys) {
System.out.println(i + "=" + phonebook.get(i));
}
N--;
}
}
或者,如果您确实希望在评论中所说的同一行输入姓名和联系人,则可以替换此行:
String name = obj.nextLine();
这一行:
String name = obj.findInLine("\D+");
这只是告诉 Java 从输入流中读取数据,直到遇到数字字符。
你需要在得到N后添加一个obj.nextLine()
语句。当你在提示中输入内容时,有一个行尾字符在你按下回车后添加(\n
) . nextInt()
只读取一个数字,所以当你在 nextInt()
之后立即调用 nextLine()
时,它只会读取行尾字符 \n
,因为 nextInt()
没有把它捡起来。通过在调用 nextInt()
之后添加额外的 nextLine()
语句,您可以摆脱 \n
,程序可以正确读取值。
此代码有效:
public static void main (String [] arg){
HashMap<String, Integer> phonebook = new HashMap<>();
Scanner obj = new Scanner(System.in);
//N= Number of contacts to be entered by the user
int N = obj.nextInt();
obj.nextLine();
//Getting N num of user inputs for names and contacts
while(N>0){
for (int i=0;i<N;i++)
{
//we need to input name and contact value pairs
//in same line
String name = obj.nextLine();
int contact = obj.nextInt();
obj.nextLine();
//assigning user input key:value pairs to hashmap
phonebook.put(name, contact);
}
//setting key:value pairs to display
Set<String> keys = phonebook.keySet();
for(String i:keys)
{
System.out.println(i +"="+phonebook.get(i));
}
N--;
}
}
控制台输入和输出如下。您可能想使用 i < N - 1
而不是 i < N
,因为我只想输入 2 个联系人,但不得不添加 3 个。这可能会使用户感到困惑。
2
foo
100
bar
1000
bar=1000
foo=100
n
1000000
bar=1000
foo=100
n=1000000