簡體   English   中英

用數組填充HashMap

[英]Populating a HashMap with an Array

因此,我嘗試查找有關如何執行此操作的教程,但沒有任何事情變得如此復雜。 這是我第一次學習HAshMaps,因此我確定我的解決方案應該很簡單,但是我不知道該怎么做。

我正在嘗試使用數組填充HashMap,並且在運行程序時,我的打印輸出顯示為null,這表明它對我而言不是填充。 已經為此工作了兩天,真的感到迷茫和困惑。

我試圖用“類型”來評估我的關鍵“費用”。

編輯:我希望我的情況二是1的打印輸出:雜貨2:娛樂3:等等.....

public static void main(String[] args) throws FileNotFoundException, IOException 
{
    // TODO code application logic here
//        HashMap<String, String> map = new HashMap<String, String>();
    HashMap<String, List<Expenses>> map = new HashMap<>();
    List <Expenses> expenseType = new ArrayList();
    double amount, totalAmount;
    int cmd, year, month, date;
    String type, resp;
    totalAmount = 0;

    String fname = JOptionPane.showInputDialog("Enter the name of the budget file, none if no file");
    if (fname.compareTo("none") !=0)
    {
        FileInputStream ist = new FileInputStream(fname);
        ObjectInputStream ifile = new ObjectInputStream(ist);


    }
    boolean done = false;
    while(!done)
    {
        resp = JOptionPane.showInputDialog("Enter a command from: \n" 
                + "\t1:Add a new deduction\n"  //think its done
                + "\t2:Add a new expense\n"  //this is done, but could be made better wit
                + "\t3:Add a deposit\n"  //This is done
                + "\t4:Deduction options\n"  
                + "\t5:Expense Options\n"  
                + "\t6:Total balances in bank\n"
                + "\t7:quit");
        cmd = Integer.parseInt(resp);

         switch(cmd)
        {
            case 1:


            break;

            case 2:
            //Give the option to add new spending occurence.
            //Give option to choose from array of spending types.
            resp = JOptionPane.showInputDialog("Enter a command from: \n" 
                + "\t1: Create a new expense\n"  //done
                + "\t2: Choose from expense list\n"
                + "\t3:quit");
            int cmd2 = Integer.parseInt(resp);
            switch (cmd2)
            {
                case 1:

                 type = JOptionPane.showInputDialog("Enter the type of the expense:"); 

                    resp = JOptionPane.showInputDialog("Enter the amount of the expense:");   
                    amount = Double.parseDouble(resp);
                    resp = JOptionPane.showInputDialog("Enter the year of the expense:");
                    year = Integer.parseInt(resp);
                    resp = JOptionPane.showInputDialog("Enter the month of the expense:");
                    month =  Integer.parseInt(resp);
                    resp = JOptionPane.showInputDialog("Enter the date of the expense:");
                    date =  Integer.parseInt(resp);
//                      List<Expenses> expenses = map.get(type);
                    // Does the map have a List for type?
                    if (expenseType == null) {
                     // No. Add one.
                     expenseType = new ArrayList<>();
                        map.put(type, expenseType);
                        }
                    Expenses e = new Expenses(type, amount, year, month, date);
                    expenseType.add(e);

//                        map.put(type, new ArrayList(expenses));
                    map.put(type, expenseType);

                    break;

                case 2:

                 //Use a hashmap to search through the ArrayLIst and print out options.
                    //How do I populate the HashMap?
                 type = null;
                 List<Expenses> typelist = map.get(type); //reads from map
                 System.out.println(typelist);


            break;
    }

}

}
}
}

請不要使用原始類型 而且,如果我了解您,那么您想要類似

Map<String, List<Expenses>> map = new HashMap<>();

然后,要添加到MapList中,請使用類似

List<Expenses> expenses = map.get(type);
// Does the map have a List for type?
if (expenses == null) {
  // No. Add one.
  expenses = new ArrayList<>();
  map.put(type, expenses);
}
Expenses e = new Expenses(type, amount, year, month, date);
expenses.add(e);

1)你應該有這條​​線

map.put(new String(type),expenses);

代替

map.put(expenses, new String(type));

使用鍵即類型從哈希圖中獲取值。

2)同時從中刪除雙引號

List<Expenses> typelist = map.get("type");

傳遞變量類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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