我是Java的新手,因此概念和术语很模糊,但我正在尝试!我需要创建一个类,它将在字符串中获取数据,解析它并返回一个具有可从主类访问的成员属性的对象(数组)。我已经读过这是比使用pointx[]
,pointy[]
,pointz[]
等多个索引数组更好的解决方案,特别是如果您需要执行交换或排序等操作。
所以,我想从主要的test[0].x
,test[100].y
等访问数组对象的成员。但是,我很沮丧地得到Exception in thread "main" java.lang.NullPointerException
而且我不喜欢不明白如何继续。
以下是我如何从main调用解析:
parse a = new parse();
parse[] test = a.convert("1 2 3 4 1 2 3 4 1 2 3 4"); // <- ** error here **
System.out.printf("%.2f %.2f %.2f %d\n", test[0].x, test[0].y, test[0].z, test[0].r);
这是解析类:
public class parse {
parse[] point = new parse[1000];
public float x;
public float y;
public float z;
public int r;
parse() {
}
public parse[] convert(String vertices) {
// parse string vertices -> object
point[0].x = 10; // <- ** error here **
point[0].y = 100;
point[0].z = 50;
point[0].r = 5;
return point;
}
}
提前感谢您对我的解析课程的任何帮助。任何相关的java指针继续我学习java和享受编程!
答案 0 :(得分:1)
当你创建一个parse
个对象数组时,数组本身是空的,实际上并不包含任何对象,只有空引用。您还需要自己创建对象并将它们存储在数组中。
此外,您的point
类是parse
类的成员,它应该是您的convert
方法的本地变量,它本身应该是static
,因为它不依赖于特定的实例。
然后您将按如下方式调用转换:
parse[] test = parse.convert("this string not used yet");
System.out.printf("%.2f %.2f %.2f %d\n", test[0].x, test[0].y, test[0].z, test[0].r);
这是解析类:
public class parse {
public float x;
public float y;
public float z;
public int r;
parse() {
}
public static parse[] convert(String vertices) {
// parse string vertices -> object
parse[] point = new parse[1000];
point[0] = new parse();
point[0].x = 10;
point[0].y = 100;
point[0].z = 50;
point[0].r = 5;
return point;
}
}