2013-03-12 98 views
4

這裏有兩個類,query語句和stackov。 ArrayList用於存儲查詢句類的對象,但是最近添加的對象覆蓋了前一個對象。如何添加對象以便它們不被覆蓋?如何在java中將對象添加到ArrayList中

QuerySentence.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--; 
       } 

    } 
} 
+0

嘗試正確縮進代碼。也不需要發佈兩個完整的類,只需發佈​​'ArrayList'操作。 – TheBronx 2013-03-12 09:00:16

回答

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

問題不是來自你的循環但是從你的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()); 
} 
+0

作爲「類型不匹配:無法從元素類型對象轉換爲QuerySentence」的for循環顯示錯誤「for(QuerySentence q:doclist)」 – 2013-03-12 09:13:49

+0

這是因爲您已將ArrayList聲明爲ArrayList doclist = new ArrayList ;'。使用'ArrayList doclist = new ArrayList ();'代替。 – Rob 2013-03-12 09:16:50

+0

謝謝。這解決了我的問題 – 2013-03-12 09:21:37

0

指數增加這樣

doclist.add(qs1); 
doclist.add(qs2); 
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); 
       } 

     }