组合2个HashMaps并返回String

时间:2013-10-13 03:19:28

标签: java hashmap

我正在进行数字技术评估。这是一个在比萨商店存储客户比萨饼,额外信息和信息的计划。在我的确认窗口中,我需要打印他订购的所有比萨饼。这是我的哈希图:

private HashMap<Integer, String> pizzas = new HashMap<Integer, String>();
private HashMap<String, Integer> pizzas_count = new HashMap<String, Integer>();

我的addPizza方法,以及我的getOrder方法

public void addPizza(String name){
    if(pizzas.containsValue(name)){
        int count = pizzas_count.get(name);
        pizzas_count.remove(name);
        pizzas_count.put(name, count++);
    }else{
        pizzas.put(pizzas.size(), name);
        pizzas_count.put(name, 1);
    }
}
public String getOrder(){
    String order = "";
    System.out.println(pizzas.toString());
    int i;
    for(i = 0; i < 12; i++){
        if(pizzas.get(i) != null){
            System.out.println(pizzas.get(i));
            order = order + pizzas_count.get(pizzas.get(i)) + " x " + pizzas.get(i) + "\n";
        }
    }
    return order;
}

我的控制台显示“{0 = bbq}”,即使添加了多个比萨饼。

getOrder方法正在返回(添加1个比萨饼和1个额外的比赛后):

PIZZAS 
null x null
EXTRAS 
1 x pasta

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

首次将bbq披萨插入披萨地图后,任何后续插入只会增加"bbq"的计数器,如下面的代码所示:

if(pizzas.containsValue(name)){ // if "bbq" already exist, increment its counter
                    // but is it really happening?
        int count = pizzas_count.get(name);
        pizzas_count.remove(name);
        pizzas_count.put(name, count++); 
              // this line is not having any effect why?
    }else{
        pizzas.put(pizzas.size(), name);
        pizzas_count.put(name, 1);
    }
代码pizzas_count.put(name, count++);中的

根本没有任何效果。这一行实际上相当于:

{
    int count = pizzas_count.get(name);
    pizzas_count.put(name, count); // count wasn't changed
    count = count + 1;
   }

取而代之的是pizzas_count.put(name, ++count);。正如你所写的那样,其余的东西都正常工作。 修复后 ,输入以下代码:

    addPizza("pizza");
    addPizza("extra");
    addPizza("pizza");
    System.out.println(getOrder());

产生以下输出:

{0=pizza, 1=extra}
pizza
extra
2 x pizza
1 x extra