2012-02-27 58 views
-1

我目前正在嘗試從座標文件中拉出數據,將其作爲字符串轉換爲矢量,然後將數據從該矢量中拉出,並將其從字符串轉換爲一系列點,然後將其放入第二個Vector。從矢量傳輸到矢量

我無法在網上找到解決方案。我有第一個向量的代碼,並將代碼轉換爲雙向以供向量使用。但我需要知道如何從第一個向量中提取數據!

我是新來的Java所以我很抱歉,如果這是一個非常簡單的問題!

這是我寫的代碼迄今..我沒有驅動程序,所以我不能測試它。 提前抱歉!

import java.io.*; 
import java.util.*; 

public class PointField { 

    String ID; 
    Vector<String> v; 
    Vector<Point> v1; 

    public PointField() { 
      v = new Vector<String>(); 
      this.v1 = new Vector<Point>(); 
      this.ID = new String(); 
    } 

    public String getID() { 
      return this.ID; 
    } 

    public Vector<String> getv() { 
      return v; 
    } 

    public Vector<Point> getv1() { 
      return this.v1; 
    } 

//Read all the lines from a file 
    public Vector<String> getString(String fileName) throws Exception{ 

// Variable declarations 
      File inputFile; 
      FileInputStream inputStream; 
      InputStreamReader inputStreamRead; 
      BufferedReader br; 

// Make the objects needed 
      inputFile = new File(fileName); 
      inputStream = new FileInputStream(inputFile); 
      inputStreamRead = new InputStreamReader(inputStream); 
      br = new BufferedReader(inputStreamRead); 

// read all the lines and call getPoint method 
      while (this.ID!= null) { 
       this.ID = br.readLine(); 
       v.addElement(this.ID); 
} 
// DOESNT WORK FROM HERE Get String out of Vector v and make it return it as String ID 
public String getString(Vector<String> v) { 
     Iterator<String> it; 
     it = this.v.iterator(); 
     while(it.hasNext()) { 
     this.ID = (String)it.next(); 
     } 

      return ID; 
} 

//* Get String into two doubles and assign to x,y variables  
    public Point makePoints(String s, String delim) { 
      while (st.hasMoreTokens()){ 
       st = new StringTokenizer(s, delim); 
       p = new Point(x,y); 
       x = Double.parseDouble(st.nextToken()); 
       y = Double.parseDouble(st.nextToken()); 
      }  
      return p;  
    } 


} 
+0

後你這麼遠。 – 2012-02-27 18:04:41

+0

香港專業教育學院增加了代碼! – user7160 2012-02-27 18:12:27

+0

IVE提高了代碼,所以它的工作原理,直到迭代器位! – user7160 2012-02-27 19:07:32

回答

1

也許你可以找到有用的從Apache Collection Util this one 或在圖書館,你可以找到各種方法與列表工作(變換,過濾器等。)

你的問題是迭代器...到it = this.v.iterator();用該迭代器做一個實例變量

+0

你有一些如何更改迭代器部分的代碼? – user7160 2012-02-27 19:08:48

0

您的getString()方法將永遠只返回Vector的最後一個元素,因爲它每次創建一個新的Iterator,遍歷所有元素,然後返回最後一個。

我不太清楚爲什麼要將元素添加到一個Vector中,然後將它們轉換爲放入第二個Vector中 - 難道你不能一步完成這一操作嗎?

看起來你正在讀第一個Vector OK的行。

我建議你迭代該向量,使用方法調用(每次處理一個點的修訂版本makePoints)將每個元素轉換爲新窗體,然後將結果添加到v2,如果你想要使用2個向量。

Iterator<String> it = v.iterator(); 
while(it.hasNext()) { 
    Point p = makePoint(it.next()); 
    v2.add(p); 
} 
+0

我只是想讓它做到唯一的方式,我知道如何!所以即時通訊首先會嘗試讓它爲兩個向量工作,然後如果我有時間,我可以嘗試簡化代碼以僅使用一個向量! – user7160 2012-02-28 10:35:09

+0

我現在編輯了代碼以使用您建議的迭代器方法,並且即時製作迭代器使用的makepoint方法 - 但是我的stringtokenizer存在問題;我收到錯誤消息:線程「主」java.lang.NullPointerException中的異常。 – user7160 2012-02-28 11:39:04

+0

您發佈的代碼不會調用'makePoints()',所以如果沒有更多的信息,我不能提供幫助。並且每個'st.hasMoreTokens()'調用'st.nextToken()'兩次,這是有風險的。 – DNA 2012-02-28 11:48:44