如何组织多个HashMap?
How to organize multiple HashMaps?
你好! 我正在尝试编写一个简单的程序作为我的第一个项目,它可以测试我的英语单词知识。该程序将类似于字典的纸质版本。现在只用我的单词测试单元(object map)来管理程序非常简单明了。
//创建HashMap,它由单词及其翻译后的等价物组成
HashMap<String, String> map = new HashMap<String, String>();
map.put("0", "zero");
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "four");
map.put("5", "five");
map.put("6", "six");
map.put("7", "seven");
map.put("8", "eight");
map.put("9", "nine");
map.put("10", "ten");
//用户输入1到100[%]之间的整数,这将决定测试中来自base(HashMap)的词数
Scanner scanner = new Scanner(System.in);
double goodAnswers = 0;
int numberOfQuestions = scanner.nextInt();
numberOfQuestions *= (double) map.size() / 100;
//创建两个数组,第一个包含来自 HashMap
的所有键
ArrayList<String> arrayInOrder = new ArrayList<String>(map.keySet());
ArrayList<String> arrayInDisorder = new ArrayList<String>();
//随机填充第二个数组
int initialArraySize = arrayInOrder.size();
for (int i = 0; i < initialArraySize; i++) {
int j = new Random().nextInt(arrayInOrder.size());
arrayInDisorder.add(arrayInOrder.get(j));
arrayInOrder.remove(j);
}
//输出一个单词(声明次数),等待用户输入翻译后的单词,然后程序将其与hashmap中的值进行比较
for (int i = 0; i < numberOfQuestions; i++) {
System.out.println(arrayInDisorder.get(i));
String input = scanner.next();
if (input.equals(map.get(arrayInDisorder.get(i)))) {
goodAnswers++;
}
}
//输出最终结果%
double result = 100 * goodAnswers / numberOfQuestions;
System.out.println("Wynik: " + String.format("%.2f", result) + "%");
然而,当我想为用户提供一个选项,让他可以选择要测试的单元时,困难就开始了。比方说,现在程序包含3个HashMap。
HashMap<String, String> map1 = new HashMap<String, String>();
map1.put("0", "zero");
map1.put("1", "one");
map1.put("2", "two");
map1.put("3", "three");
map1.put("4", "four");
HashMap<String, String> map2 = new HashMap<String, String>();
map2.put("5", "five");
map2.put("6", "six");
map2.put("7", "seven");
map2.put("8", "eight");
HashMap<String, String> map3 = new HashMap<String, String>();
map3.put("9", "nine");
map3.put("10", "ten");
map2.putAll(map3);
map1.putAll(map2);
现在只有 3 个 HashMap,我可以使用方法 putAll()
,但问题是,在上面的示例中,我合并了所有 HashMap,我想添加到我的程序中的功能是用户可以选择要测试的单位(地图)he/she
例如,如果程序将包含 100 个 Hashmap,并且用户只需在控制台中键入 1, 7, 65
,程序就会知道,它必须将第 1、第 7 和第 65 个 HashMap 合并成一个更大的 HashMap,它将用作其 'main' map
来测试用户的知识。
总而言之,我想知道如何将用户选择的这些 HashMap 合并为一个(这样我的程序就可以使用它),当 he/she 键入它们时(HashMaps ' 名称)进入控制台。
问题出现在这里:map1
您有 多于 个对象。当你开始给它们起 map1、map2 等名称时,你就是在把自己束缚在这些变量上。
要改用的概念:数组,分别 List/ArrayList。
仅此而已。
多亏你我想起了 Arrays
可以包含其他对象,例如 HashMaps
,所以我想到了这个:
ArrayList<HashMap> motherArray = new ArrayList<HashMap>();
motherArray.add(map1);
motherArray.add(map2);
motherArray.add(map3);
//要求用户选择单位数量
Scanner scanner = new Scanner(System.in);
System.out.println("How many maps do you want to include in your test?");
int numberOfMaps = scanner.nextInt();
//创建HashMap,它将包含用户从之前创建的Array中选择的所有HashMap
HashMap<String, String> motherMap = new HashMap<String, String>();
for (int i = 0; i < numberOfMaps; i++) {
System.out.println("What are their numbers (indexes)?");
int indexOfMap = scanner.nextInt();
motherMap.putAll(motherArray.get(i));
}
我不确定这是否正是您想要指出的,但即使我决定扩展或增加这些地图的数量,这个解决方案对我来说似乎也很有效。
非常感谢您的指点!
你好! 我正在尝试编写一个简单的程序作为我的第一个项目,它可以测试我的英语单词知识。该程序将类似于字典的纸质版本。现在只用我的单词测试单元(object map)来管理程序非常简单明了。
//创建HashMap,它由单词及其翻译后的等价物组成
HashMap<String, String> map = new HashMap<String, String>();
map.put("0", "zero");
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "four");
map.put("5", "five");
map.put("6", "six");
map.put("7", "seven");
map.put("8", "eight");
map.put("9", "nine");
map.put("10", "ten");
//用户输入1到100[%]之间的整数,这将决定测试中来自base(HashMap)的词数
Scanner scanner = new Scanner(System.in);
double goodAnswers = 0;
int numberOfQuestions = scanner.nextInt();
numberOfQuestions *= (double) map.size() / 100;
//创建两个数组,第一个包含来自 HashMap
的所有键 ArrayList<String> arrayInOrder = new ArrayList<String>(map.keySet());
ArrayList<String> arrayInDisorder = new ArrayList<String>();
//随机填充第二个数组
int initialArraySize = arrayInOrder.size();
for (int i = 0; i < initialArraySize; i++) {
int j = new Random().nextInt(arrayInOrder.size());
arrayInDisorder.add(arrayInOrder.get(j));
arrayInOrder.remove(j);
}
//输出一个单词(声明次数),等待用户输入翻译后的单词,然后程序将其与hashmap中的值进行比较
for (int i = 0; i < numberOfQuestions; i++) {
System.out.println(arrayInDisorder.get(i));
String input = scanner.next();
if (input.equals(map.get(arrayInDisorder.get(i)))) {
goodAnswers++;
}
}
//输出最终结果%
double result = 100 * goodAnswers / numberOfQuestions;
System.out.println("Wynik: " + String.format("%.2f", result) + "%");
然而,当我想为用户提供一个选项,让他可以选择要测试的单元时,困难就开始了。比方说,现在程序包含3个HashMap。
HashMap<String, String> map1 = new HashMap<String, String>();
map1.put("0", "zero");
map1.put("1", "one");
map1.put("2", "two");
map1.put("3", "three");
map1.put("4", "four");
HashMap<String, String> map2 = new HashMap<String, String>();
map2.put("5", "five");
map2.put("6", "six");
map2.put("7", "seven");
map2.put("8", "eight");
HashMap<String, String> map3 = new HashMap<String, String>();
map3.put("9", "nine");
map3.put("10", "ten");
map2.putAll(map3);
map1.putAll(map2);
现在只有 3 个 HashMap,我可以使用方法 putAll()
,但问题是,在上面的示例中,我合并了所有 HashMap,我想添加到我的程序中的功能是用户可以选择要测试的单位(地图)he/she
例如,如果程序将包含 100 个 Hashmap,并且用户只需在控制台中键入 1, 7, 65
,程序就会知道,它必须将第 1、第 7 和第 65 个 HashMap 合并成一个更大的 HashMap,它将用作其 'main' map
来测试用户的知识。
总而言之,我想知道如何将用户选择的这些 HashMap 合并为一个(这样我的程序就可以使用它),当 he/she 键入它们时(HashMaps ' 名称)进入控制台。
问题出现在这里:map1
您有 多于 个对象。当你开始给它们起 map1、map2 等名称时,你就是在把自己束缚在这些变量上。
要改用的概念:数组,分别 List/ArrayList。
仅此而已。
多亏你我想起了 Arrays
可以包含其他对象,例如 HashMaps
,所以我想到了这个:
ArrayList<HashMap> motherArray = new ArrayList<HashMap>();
motherArray.add(map1);
motherArray.add(map2);
motherArray.add(map3);
//要求用户选择单位数量
Scanner scanner = new Scanner(System.in);
System.out.println("How many maps do you want to include in your test?");
int numberOfMaps = scanner.nextInt();
//创建HashMap,它将包含用户从之前创建的Array中选择的所有HashMap
HashMap<String, String> motherMap = new HashMap<String, String>();
for (int i = 0; i < numberOfMaps; i++) {
System.out.println("What are their numbers (indexes)?");
int indexOfMap = scanner.nextInt();
motherMap.putAll(motherArray.get(i));
}
我不确定这是否正是您想要指出的,但即使我决定扩展或增加这些地图的数量,这个解决方案对我来说似乎也很有效。
非常感谢您的指点!