[英]How to organize multiple HashMaps?
你好! 我正在嘗試編寫一個簡單的程序作為我的第一個項目,它可以測試我對英語單詞的了解。 該程序將類似於字典的紙質版本。 現在只用我的單詞測試單元(對象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");
//用戶輸入 integer 從 1 到 100[%],這將確定測試中來自 base (HashMap) 的字數
Scanner scanner = new Scanner(System.in);
double goodAnswers = 0;
int numberOfQuestions = scanner.nextInt();
numberOfQuestions *= (double) map.size() / 100;
//創建兩個 arrays,第一個包含來自 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,我想添加到程序中的功能是用戶可以選擇哪些單位(地圖)他/她想要接受測試。
例如,如果程序將包含 100 個 Hashmap,並且用戶只在控制台中鍵入 1、7、65,則程序知道,它必須將第 1 1, 7, 65
第 7 和第 65 個 HashMap 合並成一個更大的,它將用作它的“主要” map
來測試用戶的知識。
總而言之,我想知道如何將用戶選擇的這些 HashMap 合並到一個中(這樣我的程序就可以使用它),當他/她在控制台中鍵入它們(HashMap 的名稱)時。
謝謝你,我記得, 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));
}
我不確定這是否正是您想要指出的,但即使我決定擴大或增加這些地圖的數量,這個解決方案似乎對我來說效果很好。
非常感謝您的提示!
問題在這里體現: map1
你有不止一些 object。 當您開始給它們起名字時,例如 map1、map2、...,您就是在將自己與這些變量聯系起來。
改為使用的概念:arrays,分別是 List/ArrayList。
這就是全部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.