Java 某个私有数据成员在某处神秘地更改(变为空)

Java 某个私有数据成员在某处神秘地更改(变为空),java,private,member,Java,Private,Member,我有一个名为“invertdindex”的公共类,它有两个私有数据成员: private HashMap<String, ArrayList<Integer>> invertedList; private ArrayList<String> documents; 我在queryProcess函数的第一行设置了一个断点,两个数据成员都为空。您的invertedList还有更多问题,我明白了。:-) 这实际上是由您以前遇到的问题引起的: 线 arraylist

我有一个名为“invertdindex”的公共类,它有两个私有数据成员:

private HashMap<String, ArrayList<Integer>> invertedList;
private ArrayList<String> documents;

我在queryProcess函数的第一行设置了一个断点,两个数据成员都为空。

您的invertedList还有更多问题,我明白了。:-)

这实际上是由您以前遇到的问题引起的:

线

arraylistresult=processQuery(查询,5);
应该读

ArrayList<String> result = invertedIndex.processQuery(query, 5);
arraylistresult=invertdindex.processQuery(查询,5);

建议将所有测试移到一个完全独立的文件中。这将为您省去这些字段引用方面的麻烦。

显然,它在processQuery方法中丢失了。在向我们展示此方法之前,我们无法对您进行更多说明。您是否应该将
invertedList
作为参数传递给
processQuery
invertedList
在哪里定义?+1用于在此处发布之前使用调试器。我不明白。哪个类是
processQuery
?您似乎是在测试类中使用它,而没有指定对
invertdindex
对象的引用。如果它在您的测试类中,您是否也有
invertedList
的第二个副本?是的,它会给您一个错误,除非您有两个方法副本,或者一个类扩展了另一个;这两种做法都是错误的。我只能猜测你到底做了什么错事,但别怪语言。如果你犯了同样的错误,C#也会做同样的事情。它在一个单独的文件中,在一个单独的文件夹中!!
public ArrayList<String> processQuery(String query, int k){
    ArrayList<String> result = new ArrayList<String>();
    ArrayList<Integer> resultIds;
    String[] queryWords = query.split("\\W+");
    ArrayList<Integer> list1;
    resultIds = invertedList.get(queryWords[0]);
    for (int i = 1; i < queryWords.length; i++) {       
        list1 = invertedList.get(queryWords[i]);
        resultIds = intersect(list1, resultIds);
    }

    Collections.sort(resultIds);
    for (Integer item : resultIds) {
        result.add(documents.get(item));
    }
    return result;
}
resultIds = invertedList.get(queryWords[0]);
ArrayList<String> result = processQuery(query, 5);
ArrayList<String> result = invertedIndex.processQuery(query, 5);