views:

110

answers:

3

I've got the following float array public static float camObjCoord[] = new float[8000]; declared as a global variable. I'm then adding content to it by calling the following method:

public void addcube(float highx, float lowx, float highz, float lowz){
    //Constructing new cube...
    Global.cubes = Global.cubes + 1;
    float highy = 4.5f;
    float lowy = 2.5f;

    System.out.println("ADDING A CUBE!!");

    //FRONT
    Global.camObjCoord[Global.i] = highx;
    Global.camObjCoord[Global.i+1] = lowy;
    Global.camObjCoord[Global.i+2] = lowz;

    Global.camObjCoord[Global.i+3] = highx;
    Global.camObjCoord[Global.i+4] = lowy;
    Global.camObjCoord[Global.i+5] = lowz;

    Global.camObjCoord[Global.i+6] = highx;
    Global.camObjCoord[Global.i+7] = highy;
    Global.camObjCoord[Global.i+8] = lowz;

    Global.camObjCoord[Global.i+9] = highx;
    Global.camObjCoord[Global.i+10] = highy;
    Global.camObjCoord[Global.i+11] = lowz;

    //BACK
    Global.camObjCoord[Global.i+12] = highx;
    Global.camObjCoord[Global.i+13] = lowy;
    Global.camObjCoord[Global.i+14] = highz;

    Global.camObjCoord[Global.i+15] = highx;
    Global.camObjCoord[Global.i+16] = highy;
    Global.camObjCoord[Global.i+17] = highz;

    Global.camObjCoord[Global.i+18] = highx;
    Global.camObjCoord[Global.i+19] = lowy;
    Global.camObjCoord[Global.i+20] = highz;

    Global.camObjCoord[Global.i+21] = highx;
    Global.camObjCoord[Global.i+22] = highy;
    Global.camObjCoord[Global.i+23] = highz;

    //LEFT
    Global.camObjCoord[Global.i+24] = highx;
    Global.camObjCoord[Global.i+25] = lowy;
    Global.camObjCoord[Global.i+26] = lowz;

    Global.camObjCoord[Global.i+27] = highx;
    Global.camObjCoord[Global.i+28] = highy;
    Global.camObjCoord[Global.i+29] = lowz;

    Global.camObjCoord[Global.i+30] = highx;
    Global.camObjCoord[Global.i+31] = lowy;
    Global.camObjCoord[Global.i+32] = highz;

    Global.camObjCoord[Global.i+33] = highx;
    Global.camObjCoord[Global.i+34] = highy;
    Global.camObjCoord[Global.i+35] = highz;

    //RIGHT
    Global.camObjCoord[Global.i+36] = highx;
    Global.camObjCoord[Global.i+37] = lowy;
    Global.camObjCoord[Global.i+38] = highz;

    Global.camObjCoord[Global.i+39] = highx;
    Global.camObjCoord[Global.i+40] = highy;
    Global.camObjCoord[Global.i+41] = highz;

    Global.camObjCoord[Global.i+42] = highx;
    Global.camObjCoord[Global.i+43] = lowy;
    Global.camObjCoord[Global.i+44] = lowz;

    Global.camObjCoord[Global.i+45] = highx;
    Global.camObjCoord[Global.i+46] = highy;
    Global.camObjCoord[Global.i+47] = lowz;

    //TOP
    Global.camObjCoord[Global.i+48] = highx;
    Global.camObjCoord[Global.i+49] = highy;
    Global.camObjCoord[Global.i+50] = lowz;

    Global.camObjCoord[Global.i+51] = highx;
    Global.camObjCoord[Global.i+52] = highy;
    Global.camObjCoord[Global.i+53] = lowz;

    Global.camObjCoord[Global.i+54] = highx;
    Global.camObjCoord[Global.i+55] = highy;
    Global.camObjCoord[Global.i+56] = lowz;

    Global.camObjCoord[Global.i+57] = highx;
    Global.camObjCoord[Global.i+58] = highy;
    Global.camObjCoord[Global.i+59] = highz;

    //BOTTOM
    Global.camObjCoord[Global.i+60] = highx;
    Global.camObjCoord[Global.i+61] = lowy;
    Global.camObjCoord[Global.i+62] = lowz;

    Global.camObjCoord[Global.i+63] = highx;
    Global.camObjCoord[Global.i+64] = lowy;
    Global.camObjCoord[Global.i+65] = highz;

    Global.camObjCoord[Global.i+66] = highx;
    Global.camObjCoord[Global.i+67] = lowy;
    Global.camObjCoord[Global.i+68] = lowz;

    Global.camObjCoord[Global.i+69] = highx;
    Global.camObjCoord[Global.i+70] = lowy;
    Global.camObjCoord[Global.i+71] = highz;
  }

I'm defining i in Global as 0 and it always remains 0... why? I'm calling:

GLLayer layers = new GLLayer(this);
    layers.addcube(-6, -2, 2, 6);

...in another class.

+4  A: 

(I can't believe I'm saying this, but...)

Did you perhaps forgot to Global.i += 72; after adding a cube?

Alternately you could've also done Global.camObjCoord[Global.i++] = ... for each of the assignments instead. This is a very slight "improvement", because at least you won't have to write +1, +2, +3, ... and then += at the end.

I fear that this advise will do more harm than good, though. If at all possible, the design should be reworked immediately. Generally speaking there are much better alternatives than using Global and float[], but given that this is for OpenGL, those options may or may not be applicable.

polygenelubricants
+2  A: 

Bleh. This code is going to be absolutely littered with problems if everything is allowed access to the same, mutable, global(!) variables. How about something like the following, to encapsulate what you want:

public class Cube
{
    private final float highX;
    private final float lowX;
    private final float highY;
    private final float lowY;
    private final float highZ;
    private final float lowZ;

    // TODO give domain-meaningful names to magic defaults for Y axis
    public Cube(float highx, float lowx, float highz, float lowz)
    {
        this(highx, lowx, 4.5f, 2.5f, highz, lowz);
    }

    public Cube(float highx, float lowx, float highy, float lowy, float highz, float lowz)
    {
       // TODO - assert the "high" parameters are strictly greater than the "lows"
       this.highX = highx;
       this.lowX = lowx;
       this.highY = highy;
       this.lowY = lowy;
       this.highZ = highz;
       this.lowZ = lowZ;
    }

   // TODO add relevant getter methods, and interesting methods like:
   public float getVolume() 
   {
       return (highX - lowX) * (highY - lowY) * (highZ - lowZ);
   }

   ...
}


public void addcube(Collection<? super Cube> cubes, float highx, float lowx, float highz, float lowz){
   //Constructing new cube...
   final Cube cube = new Cube(highx, lowx, highz, lowz);
   System.out.println("ADDING A CUBE!!"); // FIXME is this really necessary?

   // Note, adding to a specific collection of cubes rather than a
   // hard-coded global variable
   cubes.add(cube);
}

"Cube" is a strange word when you stare at it long enough.

Andrzej Doyle
+1  A: 

i+1 is an expression, not an assignment.

Consider this:

int i = 0; int x = i + 1; // <-- i does not increase by 1

Blub
this is irrelevant, array[i+1] refers to the element after array[i]
matt b
He is wondering why i always remains 0. This is why.
Blub
that is btw, basically the same answer that got accepted now. I explained why it didn't work, instead of just posting a solution.
Blub
@Bulb you are right. I don't believe this deserves any downvotes.
jjnguy