2013-03-12 3 views
4

다음은 query sentence와 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

답변

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

문제 는 루프에서하지만 클래스 QuerySentence에서 제공되지 않습니다. 정적 객체를 만들려고합니다. 즉, 클래스의 다른 인스턴스에 대해 다른 필드를 만들지 않아도되지만 클래스에는 고유 한 복사본 만 있습니다. 은 그래서 당신이 당신의 클래스 QuerySentence에이 값을 할당하고, 여기에 무슨 일이 벌어지고 :

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

그리고는 하나이 엉 삭제 : 물론, ArrayList

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

두 객체를 추가를 루프에서 두 가지 결과를 인쇄합니다. 그러나 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); 
} 

또한 자바 규칙을 기억하십시오 : 당신의 클래스는 대문자 (Stackov)로 시작해야합니다. 캡슐화 작업을하는 경우 필드를 private으로 선언하고 getterssetters을 작성하는 것이 좋습니다. 이 당신의 for-statement으로 다음과 같아야합니다

for(QuerySentence q : doclist) 
{ 
    System.out.println("In loop : " + q.getLabel() + q.getQuery()); 
} 
+0

"for (QuerySentence q : doclist)"에 대한 오류를 나타내는 for 루프가 "유형 불일치 : 요소 유형 객체에서 QuerySentence로 변환 할 수 없습니다." –

+0

ArrayList를 ArrayList로 선언했기 때문에 그 이유는 ArrayList doclist = new ArrayList ;'. 대신에'ArrayList doclist = new ArrayList ();를 사용하십시오. – Rob

+0

감사합니다. 이게 내 문제를 해결했습니다 –

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); 
       } 

     } 
관련 문제