全局浮点数组值不传输类

时间:2010-07-13 16:47:58

标签: java arrays global-variables

这是来自Problem with array assignment

的后续问题

我现在已经像这样完成了addcube ..当我打印数组时,所有工作都按预期工作。但是当我在另一个类中打印相同索引的AFTER赋值时,它告诉我它们等于0。所以这些价值不是“储蓄”。为什么是这样?我该如何纠正这个?

       public void addcube(float highx, float lowx, float highz, float lowz){
        //Constructing new cube...
System.out.println("f = " + f);
        Global.cubes++;
        float y = 1.5f;
        System.out.println("highx = " + highx + "lowx = " + lowx + "highz = " +         highz + "lowz = " + lowz);
        //FRONT
        Global.camObjCoord[Global.i] = highx;
        Global.i++;
        System.out.println("cube i = " + Global.i);
}

在这两种情况下我都是这样打印的......

    int p = 0;
            while(p < 72){
                System.out.println(Global.camObjCoord[p]);
                p++;
            }

Global.i = 0开头。

引用数组的唯一其他位置如下..

cubeBuff = makeFloatBuffer(Global.camObjCoord);

                FloatBuffer makeFloatBuffer(float[] arr) {
            ByteBuffer bb = ByteBuffer.allocateDirect(arr.length*4);
            bb.order(ByteOrder.nativeOrder());
            FloatBuffer fb = bb.asFloatBuffer();
            fb.put(arr);
            fb.position(0);
            return fb;
    }

我的代码中没有对数组的进一步引用。

感谢。

2 个答案:

答案 0 :(得分:2)

我会严肃质疑你的设计。你总是引用那个Global类,它似乎从任何地方都被改变了,因此你遇到了这样的问题(例如以前用你的NullPointerException)。

使用由不同类别操作的encapsulationdo not just use one global state来清楚地分开。如果类严格只对自己的成员进行操作,那么依赖性会降低,并且跟踪数据的操作位置会更容易。

答案 1 :(得分:1)

我的猜测是你的代码看起来像这样:

System.out.println(Global.camObjCoord[Global.i]);
addcube(/* values here */);
System.out.println(Global.camObjCoord[Global.i]);

并打印出来0.好吧,在分配后打印出相同的索引,因为Global.iaddcube期间更改了值。例如,假设Global.i在调用addcube之前为3。对addcube的调用会将Global.camObjCoord[3]设置为值,但会将Global.i设置为4,因此最后一行将打印出Global.camObjCoord[4] - 即刚刚设定的值。

这种事情正是为什么全局变量是一个坏主意......