这是来自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;
}
我的代码中没有对数组的进一步引用。
感谢。
答案 0 :(得分:2)
我会严肃质疑你的设计。你总是引用那个Global
类,它似乎从任何地方都被改变了,因此你遇到了这样的问题(例如以前用你的NullPointerException)。
使用由不同类别操作的encapsulation和do 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.i
在addcube
期间更改了值。例如,假设Global.i
在调用addcube
之前为3。对addcube
的调用会将Global.camObjCoord[3]
设置为值,但会将Global.i
设置为4,因此最后一行将打印出Global.camObjCoord[4]
- 即不刚刚设定的值。
这种事情正是为什么全局变量是一个坏主意......