有人可以告诉我这段代码有什么问题。
我要做的是创建一个电话簿,它将接收第一个输入作为用户想要输入的条目数量,随后的输入将是电话簿详细信息的输入 长串的形式。
它将包括人名和电话号码,在一行中,然后在输入后,我将输入的值分成两个,并将每个作为键和值存储在地图中。
但我的代码无效。
我在列表中做的是:
来自stdin的输入将是单个输入行中的名称和电话号码的单个字符串。所以我要做的是将长串的名称和数字分成两个(名称和数字),并将它们存储在列表中,然后当我想填充Map时,我将调用列表的索引数字所在的位置并将其用作值,并调用名称所在列表的索引并将其用作Map中的键。
我尝试过使用数组,但拆分字符串时会出现问题。现在使用此列表,分割的字符串似乎不会保存在列表中,可能是因为循环的迭代。
洞察力将有所帮助
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Testube {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int phoneBookSize = sc.nextInt();
String[] names = new String[phoneBookSize];
String[] numbers = new String[phoneBookSize];
Map<String, String> phoneBook = new LinkedHashMap<>();
String[] inputNameAndNumber = new String[2];
String name;
String number;
List<String> keepStrings = new ArrayList<String>();
for (int i = 0; i < phoneBookSize; i++) {
for (int j = 0; j < 2; j++) {
inputNameAndNumber = sc.next().split(" ");
String holder = inputNameAndNumber[j];
keepStrings.add(holder);
// name = inputNameAndNumber[0];
// number = inputNameAndNumber [1];
}
phoneBook.put(keepStrings.get(0), keepStrings.get(1));
}
System.out.println(phoneBook.entrySet());
}
答案 0 :(得分:0)
您应该删除j
循环。它允许您输入您的姓名和号码两次以正常工作,因为sc.next()
在此循环中。
第二点是您的电话簿只包含一个条目,因为您始终使用相同的值。这是因为您的列表永远不会被清除。
您可以将循环更改为:
// consume 'new line' after sc.nextInt()
sc.nextLine();
for (int i = 0; i < phoneBookSize; i++) {
// note: change `next` to `nextLine`
inputNameAndNumber = sc.nextLine().split(" ");
name = inputNameAndNumber[0];
number = inputNameAndNumber[1];
phoneBook.put(name, number);
}
因此,在每次迭代中填充电话簿时,您需要在下一次输入时更改name
和number
。
您的输入同时包含名称和数字,如
Alex 123
Ben 456
Ed 789
答案 1 :(得分:0)
需要重新实例化或清除列表for (int i = 0; i < phoneBookSize; i++) {
for (int j = 0; j < 2; j++) {
inputNameAndNumber = sc.next().split(" ");
String holder = inputNameAndNumber[j];
keepStrings.add(holder);
// name = inputNameAndNumber[0];
// number = inputNameAndNumber [1];
}
phoneBook.put(keepStrings.get(0), keepStrings.get(1));
keepStrings.clear();
}
,否则对象将继续堆积在其他索引中。该列表将保持其状态(在索引后面的更多对象),即索引0和1上的对象将相同,直到被清除或重新实例化。
for (int i = 0; i < phoneBookSize; i++) {
for (int j = 0; j < 2; j++) {
keepStrings = new ArrayList<String>();
inputNameAndNumber = sc.next().split(" ");
String holder = inputNameAndNumber[j];
keepStrings.add(holder);
// name = inputNameAndNumber[0];
// number = inputNameAndNumber [1];
}
phoneBook.put(keepStrings.get(0), keepStrings.get(1));
}
OR
@import "_variables";
@import "_mixins";
@import "_grid";
虽然第一个解决方案在这里更好用。