我正在制作一个项目经理程序(一个非常简单的程序)。 基本上有同事和他们的任务。 现在,我做了以下结构:我使用HashMap键作为CoWorkers的名称,值始终是CoWorkers ArryList ,其中当然包含他或她的工作。

我的问题是我可以创建此结构,但是当我尝试添加一个ArrayLists之一时,我总是将null作为返回值。

这是我的代码段:

HashMap<String, ArrayList<String>> jobs = new HashMap<String, ArrayList<String>>();

public void createJobs(){
    nameReader();
    for(String name:names){
        File f = new File(name+"_job.txt");
        if(f.exists()){
            jobs.put(name, jobReader(name));
        }
    }
    Set set = jobs.entrySet(); 
    Iterator i = set.iterator(); 
    while(i.hasNext()) { 
        Map.Entry me = (Map.Entry)i.next(); 
        System.out.print(me.getKey() + ": "); 
        System.out.println(me.getValue()); 
    } 
}

在控制台上使用此方法后,我看到以下结果:

乔治:[洗衣服]

所以我认为我做的一切都很好。

但是之后:

public void addJob(String name, String job){
    try{
        List<String> itemsList = jobs.get(name);
    itemsList.add(job);
    }catch(Exception ex){
         System.err.println(ex.getMessage() + jobs.get(name) +name);
    }
}

我正在调用此方法:

addjob("George","Clean up your room!");

控制台上的结果将是:

nullnullGeorge

UPDATE

public ArrayList jobReader(String name){
    ArrayList<String> tasks = new ArrayList<String>();
    try{
        Scanner s = new Scanner(new File(name+"_job.txt"));
        while (s.hasNext()){
            tasks.add(s.next());
        }
        s.close();
    }catch(IOException ioe){
        System.err.println("IOException: " + ioe.getMessage());
    }
    return tasks;
}

更新2

这是我的漏洞代码:

public class CoWorkers {
    HashMap<String, ArrayList<String>> jobs = new HashMap<String, ArrayList<String>>();
    ArrayList<String> names = new ArrayList<String>();

    public void createJobs(){
        nameReader();
        for(String name:names){
            File f = new File(name+"_job.txt");
            if(f.exists()){
                jobs.put(name, jobReader(name));
            }
        }
        Set set = jobs.entrySet(); 
        Iterator i = set.iterator(); 
        while(i.hasNext()) { 
            Map.Entry me = (Map.Entry)i.next(); 
            System.out.print(me.getKey() + ": "); 
            System.out.println(me.getValue()); 
        } 
    }

    public void addName(String name){
        try{
            String filename= "Names.txt";
            FileWriter fw = new FileWriter(filename,true); 
            fw.write(name+"\n");
            fw.close();
        }
        catch(IOException ioe){
            System.err.println("IOException: " + ioe.getMessage());
        }
    }

    public void addJob(String name, String job){
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();
        try{
            List<String> itemsList = jobs.get(name);
            itemsList.add(job);
        }catch(Exception ex){
             ex.printStackTrace();
        }
    }

    public ArrayList jobReader(String name){
        ArrayList<String> tasks = new ArrayList<String>();
        try{
            Scanner s = new Scanner(new File(name+"_job.txt"));
            while (s.hasNext()){
                tasks.add(s.next());
            }
            s.close();
        }catch(IOException ioe){
            System.err.println("IOException: " + ioe.getMessage());
        }
        return tasks;
    }

    public void nameReader(){
        names.clear();
        try{
            Scanner s = new Scanner(new File("Names.txt"));
            while (s.hasNext()){
                names.add(s.next());
            }
            s.close();
        }catch(IOException ioe){
            System.err.println("IOException: " + ioe.getMessage());
        }
    }
    public static void main(String[] args) {
        CoWorkers project = new CoWorkers();
        project.createJobs();
        project.addJob("George","Do the laundry");
    }
}

===============>>#1 票数:2

查看代码ex.getMessage()+ jobs.get(name)+ name,您必须在控制台打印nullnullGeorge时获取null指针异常,这意味着List itemsList = jobs.get(name); //这是null,因此是清单。 向List添加null将为您提供null指针Exception,这意味着在Map中添加George时没有发生。

===============>>#2 票数:1 已采纳

因此,我创建了自己的小测试类,并证明您的代码有效。

我不认为您在这里向我们展示了所有内容。

我认为您在某处对变量“ jobs”有两个定义,一个定义隐藏另一个。

- - - 更新 - - -

好的,所以我用硬编码的名称和作业运行您的代码,并且工作正常。 我的建议:尝试这样做。

       String names[] = {"George", "Bill"};
        for(String name:names){          
             jobs.put(name, jobReader(name));              
        }

       public ArrayList jobReader(String name){
        ArrayList<String> tasks = new ArrayList<String>();
                tasks.add("Tidy");
            return tasks;
    }

我怀疑您从文件中读取的内容与“ George”不匹配,即使我们目前尚不清楚原因。 一旦我们对列表处理有信心,便可以考虑数据。

===============>>#3 票数:1

通常,最好检查地图是否包含键,但是否要操纵该值。 例如:

public void addJob(String name, String job){

    if (!jobs.containsKey(name)) {
        jobs.put(name, new ArrayList<String>());
    }
    List<String> itemsList = jobs.get(name);
    itemsList.add(job);
}

您遇到的另一个问题是,当您找不到某人的工作文件时,您会静默地失败。 考虑将其添加到createJobs()

    for(String name:names){
        File f = new File(name+"_job.txt");
        if(f.exists()){
            jobs.put(name, jobReader(name));
        } else { // This is new
            jobs.put(name, new ArrayList<String>());
        }
    }

  ask by Wermerb translate from so

未解决问题?本站智能推荐:

1回复

一个人如何从两个ArrayLists中创建HashMap?

我有两个ArrayLists: 和 如何使用hashSet中的keySet ArrayList作为键集以及HashMap中的值ArrayList值创建HashMap?
19回复

创建一个Arraylists数组

我想创建一个如下所示的arraylist数组: 但它没有编译。 我怎样才能做到这一点?
5回复

使用ArrayLists创建矩阵

我想创建一个带有n行和m列的ArrayList-matrix 我已经编写了创建这种矩阵的代码,但是当我清除包含列数据的列表时,我的代码不显示值。 这是我的 有可能清除intList的内容而不清除mainList的内容吗?
1回复

使用JsonObject作为键创建一个HashMap

我有一个HashMap<JsonObject, Integer> ,其中JsonObject属于Google的gson库。 我注意到,如果您放置一个条目,然后修改JsonObject键(例如添加成员或其他内容),则将无法使用相同的键来获取条目的值。 我怀疑是因为更改成员后Js
1回复

使用ArrayLists在Java中创建图

我是Java的新手,我想通过创建图形进行练习。 我在创建图形时遇到了麻烦,因为我不确定如何正确执行操作。 我缺乏逻辑,Java新手使事情变得非常困难。 我想知道是否有人可以帮助我或指导我走正确的道路! 谢谢! 基本上,我试图创建类似这样的图形。 一个节点将为其邻居包含一个Arra
2回复

如何创建动态arraylist并将arraylist放入hashmap?

每个表都有不同的列,那么如何对动态sql表使用此代码?(假设,我可以通过其他方法获取列值,可以从Information.Schema中获取列数。)假设,列存储的数量以int值i。 如何使用循环并使其动态地工作?
2回复

如何比较Hashmap中的2个arraylists?

我有一个名为fetchContactName()的arraylist,它返回我的联系人列表中的所有名称(31),一个名为fetchContactNumbers()的arraylist返回与fetchContactName()关联的所有电话号码(31 fetchContactName() ,以及一
3回复

使用hashmap的arraylist创建hashmap

我有以下结构 现在,我需要从客户端创建相同的结构,并像上述格式一样发送数据。 我假设结构是这样的。 如上例所示,任何可以帮助我创建正确地图的人。
3回复

使用半已知密钥 - Java查找ArrayLists的HashMap中的最大值和最小值

我有一个ArrayLists的HashMap如下: l , k和n基于几个循环获取它们的值,因此它们的值根据参数而变化。 在这种情况下,我想知道给定的k值,如何在相关的ArrayLists中找到元素的最小值和最大值。 (请注意,长度或ArrayLists也取决于参数) 例如
1回复

尝试创建一个由arraylists组成的arraylist,但是遇到此错误:

x.add(al1)上的“令牌'al1上的语法错误,此令牌后需要VariableDeclaratorID”; 线。 知道为什么会这样吗? 忽略第3行