java - 组合 2 个 HashMap 并返回 String

标签 java hashmap

我正在进行数字技术评估。这是一个在披萨店存储顾客披萨、附加食品和信息的程序。在我的确认窗口中,我需要打印他订购的所有披萨。这是我的 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

任何帮助将不胜感激。

最佳答案

首次将 bbq 披萨插入披萨 map 后,任何后续插入都会增加 "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

关于java - 组合 2 个 HashMap 并返回 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341508/

相关文章:

java - 通过sockets java下载图片

java - 如何在加载 YAML 配置文件时验证其值?

OpenCL 中的 HashMap?

java - 将 HashMap 的键保存到按 Java 中的 HashMaps 值排序的 ArrayList

java - LinkedHashMap 的 put() 方法内部是如何工作的?

go - 无法使用 if val 从 Golang 中的 map[time.Time]Measure 获取值,ok := mapMeasures[ts]; ok {}

java - 为什么 Spring 容器在创建 Bean 后立即销毁它们?

java - 将 double 值截断为小数点后 6 位

java - Struts2 表单经过逐步增强,无需 AJAX 即可工作

java - return hashmap 更改指针而不是返回值