想在MapJava中添加元素吗

想在MapJava中添加元素吗,java,Java,我的问题是 编写一个收集和存储所有卡片的程序,以帮助用户在一个文档中查找所有卡片 给定的符号 这个纸牌游戏由N张牌组成。从用户和存储中获取N张卡的详细信息 具有属性符号和数字的卡对象中的值 将所有卡存储在地图中,以符号为键,以卡列表为值。这张地图是用来 根据其符号轻松地将所有卡分组 一旦捕捉到所有细节,按字母顺序从地图上打印所有不同的符号。 对于每个符号,分别打印所有卡片详细信息、卡片数量及其总和 我对上述问题的解决办法是 import java.util.*; public class Col

我的问题是

编写一个收集和存储所有卡片的程序,以帮助用户在一个文档中查找所有卡片 给定的符号

这个纸牌游戏由N张牌组成。从用户和存储中获取N张卡的详细信息 具有属性符号和数字的卡对象中的值

将所有卡存储在地图中,以符号为键,以卡列表为值。这张地图是用来 根据其符号轻松地将所有卡分组

一旦捕捉到所有细节,按字母顺序从地图上打印所有不同的符号。 对于每个符号,分别打印所有卡片详细信息、卡片数量及其总和

我对上述问题的解决办法是

import java.util.*;
public class CollectCards {
    protected ArrayList<Integer> array;
    protected Map<String,ArrayList<Integer>> card;
    public CollectCards(){
        this.array = new ArrayList<Integer>();
        this.card = new HashMap<String,ArrayList<Integer>>();
    }
    public void addCard(String name,int number) {
        if(this.card.containsKey(name)) {
             this.card.get(name).add(number);             
        }else {
            this.array.add(number);
            this.card.put(name,this.array);
       }
    }
    public void display(){
       for(Map.Entry<String,ArrayList<Integer>> card : this.card.entrySet()){
          System.out.println(card.getKey()+"\t"+card.getValue());
       }
    }
    public static void main(String[] args){
       Scanner input = new Scanner(System.in);
       CollectCards card = new CollectCards();
       do{
        System.out.println("Enter the card details");
        card.addCard(input.next(),input.nextInt());            
        System.out.println("Want to repeat again!!!");
    }while(input.next().equals("Yes"));
    card.display();
  }
 }
输出应为:

 s -> [1,2,3,4]
 n -> [1,2]
 m -> [1]
我为上述程序获得的输出:

 s -> [1,2,3,4]
 n -> [1,2,3,4]
 m -> [1,2,3,4]

将方法
addCard
更改为此代码

public void addCard(String name,int number) {
    if(this.card.containsKey(name)) {
         this.card.get(name).add(number);             
    }else {
        ArrayList<Integer> newList = new ArrayList<Integer>(1);
        this.card.put(name,newList);
   }
}
public void addCard(字符串名称、整数){
如果(这张卡片包含姓名){
此.card.get(name).add(number);
}否则{
ArrayList newList=新ArrayList(1);
此.card.put(名称、新列表);
}
}
您面临的问题是,您基本上是将对ArrayList的相同引用放在每个要放入HashMap的键上

实际上,您要做的是为每个键设置不同的ArrayList。
因此,您不再需要
数组
变量

您需要学习一些关于语言的知识,比如JAVA

存在一些通过引用传递其变量的语言这意味着您传递的是对对象的引用,而不是对对象的引用,因此,当您这样做时:

ArrayList array = new ArrayList();
map.add(1, array);

array.add(1)
您正在修改两个数组、您的数组和地图中的数组,因为地图具有对对象的引用而不是新对象,所以您使用的是仅在两个不同位置引用的同一对象

所以答案是:每个人都需要一个新的阵列,你需要一个新的实例:

new ArrayList();

您一直在使用同一个
ArrayList
实例。每个映射键需要一个ArrayList实例。您需要付出更多的努力,并且更加具体。“这是作业,这是我得到的”是不够的。非常感谢@KevinEsche。我找到了解决办法。
new ArrayList();