Глобальные значения массива с плавающей точкой не передают классы - PullRequest
0 голосов
/ 13 июля 2010

Это следующий вопрос из Проблема с присвоением массива

Теперь у меня есть 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 ]

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

Я бы серьезно усомнился в твоем дизайне.Вы всегда ссылаетесь на этот класс Global, который, очевидно, меняется везде, и поэтому вы сталкиваетесь с такими проблемами (например, ранее с вашим NullPointerException ).

Попробуйте четко разделить вещи, используя encapsulation и , а не просто использовать одно глобальное состояние , с которым работают разные классы.Если классы строго работают только со своими собственными членами, то зависимости уменьшаются, и намного легче отслеживать, где данные обрабатываются.

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

Я предполагаю, что ваш код выглядит примерно так:

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

и он печатает 0. Ну, это не распечатывает тот же индекс после назначения, потому что Global.i изменяет значение в течение addcube.Например, предположим, что Global.i равен 3 до вызова addcube.Вызов addcube установит Global.camObjCoord[3] в значение, но затем установит Global.i в 4, поэтому в последней строке будет напечатано Global.camObjCoord[4] - т.е. не значение, которое только что было установлено.

Именно поэтому глобальные переменные являются плохой идеей ...

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