Java 从向量到向量的转换
我目前正在尝试从坐标文件中提取数据,将其作为字符串转换成向量,然后从该向量中提取数据,并将其从字符串转换成一系列点,然后将其放置到第二个向量中 我在网上的任何地方都找不到解决方案。我有第一个向量的代码,以及将其转换为向量使用的双倍体的代码。但我需要知道如何从第一个向量中提取数据 我是Java新手,如果这是一个非常简单的问题,我深表歉意 这是我到目前为止写的代码。。我还没有司机,所以我不能测试它。 提前道歉Java 从向量到向量的转换,java,vector,Java,Vector,我目前正在尝试从坐标文件中提取数据,将其作为字符串转换成向量,然后从该向量中提取数据,并将其从字符串转换成一系列点,然后将其放置到第二个向量中 我在网上的任何地方都找不到解决方案。我有第一个向量的代码,以及将其转换为向量使用的双倍体的代码。但我需要知道如何从第一个向量中提取数据 我是Java新手,如果这是一个非常简单的问题,我深表歉意 这是我到目前为止写的代码。。我还没有司机,所以我不能测试它。 提前道歉 import java.io.*; import java.util.*; public
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;
}
}
import java.io.*;
导入java.util.*;
公共类点域{
字符串ID;
向量v;
向量v1;
公共点域(){
v=新向量();
this.v1=新向量();
this.ID=新字符串();
}
公共字符串getID(){
返回此.ID;
}
公共向量getv(){
返回v;
}
公共向量getv1(){
返回这个.v1;
}
//读取文件中的所有行
公共向量getString(字符串文件名)引发异常{
//变量声明
文件输入文件;
文件输入流输入流;
InputStreamReader inputStreamRead;
缓冲剂;
//制作所需的对象
inputFile=新文件(文件名);
inputStream=新文件inputStream(inputFile);
inputStreamRead=新的InputStreamReader(inputStream);
br=新的BufferedReader(inputStreamRead);
//阅读所有行并调用getPoint方法
while(this.ID!=null){
this.ID=br.readLine();
v、 addElement(this.ID);
}
//从这里不起作用从向量v中获取字符串并使其作为字符串ID返回
公共字符串getString(向量v){
迭代器;
它=这个.v.迭代器();
while(it.hasNext()){
this.ID=(String)it.next();
}
返回ID;
}
//*将字符串分成两个双精度,并分配给x,y变量
公共点生成点(字符串s、字符串delim){
而(st.hasMoreTokens()){
st=新的StringTokenizer(s,delim);
p=新点(x,y);
x=Double.parseDouble(st.nextToken());
y=Double.parseDouble(st.nextToken());
}
返回p;
}
}
也许你能找到有用的
从
或者在该库中,您可以找到处理列表的各种方法(变换、筛选等)
您遇到的问题是迭代器…istead of toit=this.v.iterator();
使用该迭代器执行一个实例变量您的getString()
方法将只返回向量的最后一个元素,因为它每次创建一个新的迭代器,遍历所有元素,然后返回最后一个元素
我不太清楚为什么要将元素添加到一个向量中,然后将它们转换为第二个向量——难道不能一步完成吗
看起来您正在将这些行读入第一个向量OK
我建议您然后迭代该向量,使用方法调用(一次处理一个点的makePoints
的修订版)将每个元素转换为新形式,然后将结果添加到v2,如果您仍然希望使用2个向量的话
Iterator<String> it = v.iterator();
while(it.hasNext()) {
Point p = makePoint(it.next());
v2.add(p);
}
Iterator it=v.Iterator();
while(it.hasNext()){
点p=生成点(it.next());
v2.添加(p);
}
我对代码进行了改进,使其一直工作到迭代器位!作为一般规则,您应该使用ArrayList而不是旧的Vector类。请在编辑代码时正确设置代码格式…抱歉!我对代码进行了格式化,使其更具可读性!我只是想用我知道的唯一方法来完成它!因此我将首先尝试使用ge如果我有时间,我可以尝试简化代码,使之只使用一个向量!我现在编辑了代码,使用了您建议的迭代器方法,我现在正在使用迭代器使用的makepoints方法-但是我的stringtokenizer有一个问题;我得到错误消息:线程“main”中出现异常java.lang.NullPointerException。您发布的代码不调用makePoints()
,因此如果没有更多信息,我无法帮助您。并且您为每个st.hasMoreTokens()
调用st.nextToken()
两次,这是有风险的。makePoints方法试图将加载文件中的数据中的xy坐标分配给第一个向量。