返回具有可从主类访问的成员属性的对象数组的类

时间:2012-06-05 21:11:39

标签: arrays object return

我是Java的新手,因此概念和术语很模糊,但我正在尝试!我需要创建一个类,它将在字符串中获取数据,解析它并返回一个具有可从主类访问的成员属性的对象(数组)。我已经读过这是比使用pointx[]pointy[]pointz[]等多个索引数组更好的解决方案,特别是如果您需要执行交换或排序等操作。

所以,我想从主要的test[0].xtest[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和享受编程!

1 个答案:

答案 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;
    }
}