4

这里有两个类,查询语句和stackov。一个arraylist用于存储查询语句类的对象。但是最近添加的对象覆盖了之前的对象。如何添加对象使其不被覆盖?

查询语句.java

public class QuerySentence {

    public static String query;
    public static String label;
    public QuerySentence(){

    }
    public QuerySentence(String query,String label){
        this.query = query;
        this.label = label;
    }
}  

Stackov.java

package QueryClassifier;

import java.util.ArrayList;

public class stackov {

    public static void main(String args[])
    {
        QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");
        QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");
        ArrayList<Object> doclist = new ArrayList<Object>();

            doclist.add(0,qs1);
            doclist.add(1,qs2);

            int size = doclist.size();
               while(size>0)
               {
                    QuerySentence qs3 = (QuerySentence) doclist.get(size-1);
                    System.out.println("\nin loop : " + qs3.label + qs3.query);
                    size--;
                }

    }
}   
4

4 回答 4

7

问题不是来自你的循环,而是来自你的 class QuerySentence。您正在创建静态对象,这意味着您不会为类的不同实例创建不同的字段,但该类将只有它们的唯一副本。所以这里发生了什么,你将这些值分配给你的类QuerySentence

QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");

然后用这个擦除它:

QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");

当您将两个对象添加到您ArrayList的 中时,当然在您的循环中您将打印两个结果。但只有qs2中的结果。从您的字段声明中删除static,它将正常工作:

public String query;
public String label;

添加时不需要索引查询语句。

doclist.add(qs1);
doclist.add(qs2);

你也可以改进你的循环。你可以这样做:

ArrayList<QuerySentence> doclist = new ArrayList<QuerySentence>();

// some code...

for(QuerySentence q : doclist)
{
    System.out.println("In loop : " + q.label + q.query);
}

还请记住 Java 约定:您的类应该以大写字母 ( ) 开头Stackov。如果您还从事封装工作,最好声明您的字段并为它们private创建getterssetters。有了这个,你for-statement应该看起来像这样:

for(QuerySentence q : doclist)
{
    System.out.println("In loop : " + q.getLabel() + q.getQuery());
}
于 2013-03-12T08:57:52.697 回答
1
doclist.add(qs1);
doclist.add(qs2);
于 2013-03-12T08:57:40.030 回答
0
       public static void main(String args[])
        {
            QuerySentence qs1 = new QuerySentence("What state produces the best lobster to eat","LOCATION");
            QuerySentence qs2 = new QuerySentence("What is Dick Clark's birthday","DATE");
            ArrayList<QuerySentence> doclist = new ArrayList<QuerySentence>();

                doclist.add(qs1);
                doclist.add(qs2);

                for(QuerySentence sent: docList)
                {
                   System.out.println("\nin loop : " + sent.label + sent.query);
                }

        }
于 2013-03-12T09:00:50.973 回答
0

不需要索引像这样添加

doclist.add(qs1);
doclist.add(qs2);
于 2013-03-12T09:00:22.380 回答