访问类的字段和方法以检索具有某个值

时间:2016-07-08 00:03:02

标签: java

我正在尝试访问具有id,name,text和单词列表的文档类。我尝试将我拥有的文档ID与id进行比较,并在找到时获取附加到此id的单词列表以查找确切的单词并返回其频率。 任何帮助都非常感谢。

public class Doc {
    private int documentID;
    private static Doc docInstance = null;
    private String documentText;
    private ArrayList<String> listOfTokens;
    static int docCount = 0;
    int tokFreq = 0;

    public Doc() {
        documentID = 0;
        listOfTokens = new ArrayList<String>();
        tokFreq = 0;
        docCount++;
    }

    public static Doc getDocInstance() { 
        if (docInstance == null) {
            docInstance = new Doc();
        }
        return docInstance;
    }

    public ArrayList<String> getListOfTokens() { 
        return listOfTokens;
    }

    public void setDocumentID(int x){ 
        if (getDocumentID() != x)
           this.documentID = x;
    }
}

我正在尝试这个

public static void createDocumentVector(TreeMap<Integer,Integer> 
documentVector, TreeMap<String, ArrayList<Integer>>qm, int N) 
{
    int eachDoc = 0;

    Collection<String> allKeys = qm.keySet();
    ArrayList<Integer> l1 = new ArrayList<Integer>();
    boolean addedTerm = false;

    /**
    Obtain an Iterator for Collection
    */
    Iterator<String> itr = allKeys.iterator();
    String key;
    int termFrequency = 0;
    int documentFrequency = 0;

    /**
     Iterate through TreeMap values iterator
     */
    while(itr.hasNext()) 
    {
        key = (String)itr.next();
        Integer LL = 0;
        l1 = qm.get(key); // Returns value of that key
        for (int k = 0; k < l1.size(); k++) 
        {
            LL = l1.get(k);
            Doc doc = new Doc();
            doc.getDocInstance().setDocumentID(LL);
            int size = doc.getListOfTokens().size();
            String[] docIdTokens =  doc.getListOfTokens().toArray(new String[size]);
            for (String s : docIdTokens){
              if(s.equalsIgnoreCase(key)){
                 termFrequency++;
              }
            }

            documentFrequency = l1.size();
            eachDoc = getTFIDF(termFrequency, documentFrequency, N);
            documentVector.put(eachDoc, LL);
        }


    }
}

在调试过程中,它没有完全运行并且找不到源代码。 我想把类Doc改成这个:

public class Doc<ListOfTokens> {

private static int documentID;
private static Doc docInstance = null;
private String documentName;
private String documentText;
private HashMap<String, Integer> ListOfTokens = new HashMap<String, Integer>();
private TreeMap<Integer, ListOfTokens> documentMap = new TreeMap<Integer, ListOfTokens>();
int tokFreq = 0;
static int docCount = 0;
-----
}

但我认为这会有点复杂。所以任何建议都会有很大的帮助。

1 个答案:

答案 0 :(得分:0)

您不需要将关键字static用于类Doc的documentID属性。由于您希望存在多个doc对象,并且每个对象都需要具有自己的documentID值,因此您需要将documentID用作非静态字段。