Почему моя индексная переменная не увеличивается, когда я добавляю к ней числа? - PullRequest
0 голосов
/ 13 июля 2010

У меня есть следующий массив с плавающей точкой public static float camObjCoord[] = new float[8000];, объявленный как глобальная переменная. Затем я добавляю контент, вызывая следующий метод:

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 в Global как 0, и оно всегда остается 0 ... почему? Я звоню:

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

... в другом классе.

Ответы [ 3 ]

4 голосов
/ 13 июля 2010

(не могу поверить, что говорю это, но ...)

Возможно, вы забыли Global.i += 72; после добавления куба?

В качестве альтернативы вы могли бы вместо этого сделать Global.camObjCoord[Global.i++] = ... для каждого из заданий. Это очень незначительное"улучшение", потому что по крайней мере вам не придется писать +1, +2, +3, ... и затем += в конце. 1015 *

Боюсь, что этот совет принесет больше вреда, чем пользы. Если это вообще возможно, дизайн должен быть немедленно переработан. Вообще говоря, есть гораздо лучшие альтернативы, чем использование Global и float[], но, учитывая, что это для OpenGL, эти опции могут или не могут быть применимы.

2 голосов
/ 13 июля 2010

BLEH. Этот код будет просто завален проблемами, если всем будет разрешен доступ к одним и тем же изменчивым глобальным (!) Переменным. Как насчет чего-то вроде следующего, чтобы инкапсулировать то, что вы хотите:

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);
}

"Куб" - это странное слово, когда вы смотрите на него достаточно долго.

1 голос
/ 13 июля 2010

i + 1 - это выражение, а не присваивание.

Учтите это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...