簡體   English   中英

如何組織多個HashMap?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM