static HashMap<Integer, String> names = new HashMap<Integer, String>();
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
int i = 0;
while (in.hasNext())
s = in.nextLine();
for (int j = 0; j < s.split(" ").length; j++) {
names.put(i, s.split(" ")[j]);
}
i++;
}
我尝试读取每行输入并根据空格拆分它,然后将每个元素分别分配给相同的散列键。
Ex输入
约翰乔鲍勃詹姆斯
亨利乔治
应该进入像这样的散列图
1:约翰
1:乔
1:bob
2:詹姆斯
3:亨利
3:乔治
当我输入输入时,退出循环的最佳方法是什么?
答案 0 :(得分:1)
映射是键/值集合,其中每个键只链接到一个值。在你的情况下,你似乎想要每个键有几个值 - 一个选项如下所示,其中每个键(行号)映射到一个名称列表:
Map<Integer, List<String>> names = ...;
要填充地图,您需要为每一行创建一个列表,例如:
public static void main(String[] args) {
int i = 0;
while (in.hasNext()) {
String s = in.nextLine();
names.put(i, Arrays.asList(s.split(" ")));
i++;
}
}
ps:我认为while
行末尾的缺失括号是一个错字。
答案 1 :(得分:0)
一种简单的方法就是在地图中使用一个列表。 像这样:
static HashMap<Integer, ArrayList<String>> names = new HashMap<>();
完整的工作代码示例:
int i = 0;
while (in.hasNext()) {
String s = in.nextLine();
if(s.equalsIgnoreCase("break")) break;
ArrayList<String> namesList = new ArrayList<>();
names.put(i, namesList);
for (int j = 0; j < s.split(" ").length; j++) {
namesList.add(s.split(" ")[j]);
}
i++;
}
System.out.println();
for (Map.Entry<Integer, ArrayList<String>> entry : names.entrySet()) {
System.out.print(entry.getKey()+": ");
for (String s : entry.getValue()) {
System.out.print(s + ", ");
}
System.out.println();
}