2012-12-12 1 views
1

벡터 벡터에 벡터를 넣고 싶습니다. 나는 이것을 반복하고 결국에는 마지막으로 추가 된 벡터 만 있지만, 추가하려는 벡터의 수만큼 자주 사용합니다.여러 벡터를 벡터 벡터에 추가하면 작동하지 않습니다. Java

public void initVectors() { 

    rows = new Vector<Vector<String>>(); 
    Vector<String> data = new Vector<String>(); 

    Vector<String> t = new Vector<String>(); 
    String aLine; 
    try { 
     FileInputStream fin = new FileInputStream("module.txt"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(fin)); 
     // extract data 
     while ((aLine = br.readLine()) != null) { 
      StringTokenizer st = new StringTokenizer(aLine, ","); 
      t.clear(); 
      while (st.hasMoreTokens()) { 
       t.addElement(st.nextToken()); 
       // System.out.println(st.nextToken()); 
      } 

      System.out.println(t); 
      System.out.println("add it"); 
      rows.addElement(t); 

     } 

     Enumeration vEnum = rows.elements(); 
     System.out.println("Elements in vector:"); 
     while (vEnum.hasMoreElements()) { 
      System.out.print(vEnum.nextElement()); 
      System.out.println(); 
     } 


     br.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

내 출력된다 :
[Physik, 6 :
[GDI 1, 4, 1.0]
그것이
[Physik, 6, 130]
그 벡터
요소를 추가 , Vectortrow는 단지 참조를 유지 1.3]
[Physik, 6, 130]

+0

't'는'rows'에 다시 추가 할 때 여전히 동일한 참조입니다. – irrelephant

+0

답변 해 주셔서 감사합니다. 하지만 어떻게해야합니까? – Kinnocchio

+1

사이드 노트 : Vector 대신 ArrayList를 사용하십시오 (스레드 안전성이 필요한 경우 Collections.synchronizedList (새 ArrayList())). Enumeration 대신 Iterator를 사용하십시오. – ignis

답변

3

, 그것은 공동하지 않는다 py 요소. 외부 t을 변경하면 row의 내용에 영향을줍니다.

t.clear()을 사용하는 대신 t = new Vector()을 사용하여 새 개체를 만들고 rows에 추가 된 것에 영향을주지 않습니다.

+0

Worked! 고맙습니다. – Kinnocchio

관련 문제