Есть ли разница в конечном содержимом в этих двух разных способах заполнения массивов? - PullRequest
0 голосов
/ 13 июля 2010

предполагается, что переменные и числа в 2 примерах имеют одинаковые числа ... Есть ли разница в конечном содержимом в этих 2 различных способах заполнения массивов? я ошибаюсь, предполагая, что это то же самое?

Обычно я пытаюсь визуализировать графику с помощью OpenGL, первый пример не работает, а второй работает.

Пример 1 ...

Глобальная декларация .. public static final 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;
}

Пример 2 ...

        final static float camObjCoord[] = new float[] {
            // FRONT
             -2.0f, -1.5f,  2.0f,
              2.0f, -1.5f,  2.0f,
             -2.0f,  1.5f,  2.0f,
              2.0f,  1.5f,  2.0f,
             // BACK
             -2.0f, -1.5f, -2.0f,
             -2.0f,  1.5f, -2.0f,
              2.0f, -1.5f, -2.0f,
              2.0f,  1.5f, -2.0f,
             // LEFT
             -2.0f, -1.5f,  2.0f,
             -2.0f,  1.5f,  2.0f,
             -2.0f, -1.5f, -2.0f,
             -2.0f,  1.5f, -2.0f,
             // RIGHT
              2.0f, -1.5f, -2.0f,
              2.0f,  1.5f, -2.0f,
              2.0f, -1.5f,  2.0f,
              2.0f,  1.5f,  2.0f,
             // TOP
             -2.0f,  1.5f,  2.0f,
              2.0f,  1.5f,  2.0f,
             -2.0f,  1.5f, -2.0f,
              2.0f,  1.5f, -2.0f,
             // BOTTOM
             -2.0f, -1.5f,  2.0f,
             -2.0f, -1.5f, -2.0f,
              2.0f, -1.5f,  2.0f,
              2.0f, -1.5f, -2.0f,
        };

// edit Я добавляю addcube(6, 2, 6, 2); к первому примеру, и ARRAY равен .. [F@4499e290. Почему назначение массива может быть испорчено?

Ответы [ 4 ]

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

Ваш первый пример предполагает, что когда вызывается addcube, Global.i инициализируется некоторым разумным значением. Несколько вызовов addcube могут инициализировать разные части одного и того же массива, если Global.i изменится. Метод addcube также изменяет значение Glocal.cubes, которое вы не делаете во втором примере.

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

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

Я добавляю addcube(6, 2, 6, 2); к первому примеру, и ARRAY равен .. [F@4499e290.Почему назначение массива может быть испорченным?

Это не портит!Если вы попытаетесь напечатать массив, который вы получите.

  • [F@4499e290 - это обычный результат вызова Object.toString () для float[] объекта.
  • Когда вы вызываете System.out.print (...) для некоторой переменной или выражения, объявленным типом которого является Object, вызывается метод Object.toString().Аналогично для конкатенации строк.

Если вы хотите напечатать содержимое массива, вам нужно написать дополнительный код для этого.

Кстати, когда вы выяснили, что выНепосредственная проблема, вы должны попытаться сделать дизайн своего приложения более объектно-ориентированным.Все, что использует глобальные переменные / статику, уродливо и может привести к неприятностям, если вы когда-либо (КОГДА-ЛИБО) захотите запустить более одного экземпляра вашего приложения в одной и той же JVM.

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

Я почти уверен, что у меня нет этого точного, но если бы я пытался построить такой квадратный вид, я бы сказал:

for(float x : new float[]{-2.0f, 2.0f} ) 
    for(float y : new float[]{-1.5f, 1.5f} ) 
       create new Point(x,y); 

Что можно легко увидетьдать -2, -1,5;-2, 1,5;2, -1,5 и 2, 1,5, которые должны быть 4 угловыми точками квадрата.

Похоже, что добавление оси z просто добавило бы уровень z после y (и я немного исправлю синтаксис):

float[] xpts=new float[]{-2.0f, 2.0f}; 
float[] ypts=new float[]{-1.5f, 1.5f};
float[] zpts=new float[]{-2.0f, 2.0f} 

for(float x : xpts  ) 
    for(float y : ypts ) 
        for(float z : zpts ) 
           create_new_3D_Point(x,y,z);

Я на самом деле даю это довольно хорошошанс работать, подумав об этом некоторое время.Если кто-нибудь попробует, пожалуйста, дайте мне знать.

Я предпочитаю НИКОГДА не перечислять числа, подобные этому, повторение подвержено ошибкам и ошеломляет.Сокращение до шаблона устраняет ошибки в стиле опечаток и помогает распознавать шаблоны для дальнейшей оптимизации.

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

Во втором примере (который на самом деле является менее типизированным) размер массива также «по необходимости», чтобы содержать элементы - вместо того, чтобы быть 8000 плавающими в первом примере - возможно, поэтому первый не работает.

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