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

时间:2014-03-18 22:17:13

标签: java private member

我有一个公共类名为" InvertedIndex "它有两个私人数据成员:

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

我为它们生成了getter和setter函数。我有一个名为&#34; buildFromTextFile &#34;它填充了两个数据成员,我还有另一个名为&#34; processQuery &#34;的函数。我在课堂上写了一个测试单元&#34; InvertedIndexTest &#34;对于processQuery,如下所示:

@Test
public void testProcessQuery() throws IOException{
    InvertedIndex invertedIndex = new InvertedIndex();
    String query = "ryerson award";
    ArrayList<String> expectedResult = new ArrayList<String>();
    expectedResult.add("ryerson award ??..23847");
    invertedIndex.buildFromTextFile("input.tsv");
    ArrayList<String> result = processQuery(query, 5);
    Assert.assertEquals(expectedResult, result);        
}

在此功能中,在调试模式下,当功能&#34; buildFromTextFile &#34;被调用,代码将转到类&#34; InvertedIndex &#34;并填充数据成员,因此在此函数的末尾,数据成员中包含正确的数据。当我看到 invertedIndex.getInvertedList()。ToString()时,再次运行回到此单元测试功能,我可以看到数据仍然是正确的。然后调用函数 processQuery ,当运行进入&#34; InvertedIndex &#34; class,在此函数内, invertedList()。ToString()为空。似乎所有数据都丢失了,但我不知道在哪里。我很感激你的帮助。

这是processQuery方法:

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为空:

resultIds = invertedList.get(queryWords[0]);

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

1 个答案:

答案 0 :(得分:2)

我看到你的倒置列表存在更多问题。 : - )

这实际上是由您之前遇到的完全相同的问题造成的: Hashmap get function returns null

ArrayList<String> result = processQuery(query, 5);

应该阅读

ArrayList<String> result = invertedIndex.processQuery(query, 5);

建议将所有测试移至完全独立的文件中。这样可以省去这些现场参考的麻烦。