Проблема с назначением массива - PullRequest
2 голосов
/ 13 июля 2010

У меня следующая проблема с присваиванием массива ...

У меня есть глобальный массив с плавающей точкой в ​​Global.java, объявленный как ...

public static float camObjCoord[] = new float[8000];

Затем я заполняю его содержимое.

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;
            System.out.println("cube i = " + Global.i);
    }

Я называю этот метод так ...

addcube(-2.0f, 2.0f, -2.0f, 2.0f);

Ниже приведена отладочная печать.

         07-13 16:01:16.220: INFO/System.out(4837): highx = -2.0lowx = 2.0highz = -   2.0lowz = 2.0       //This is the values coming in to the class
         07-13 16:01:16.220: INFO/System.out(4837): 0.0 //This is the contents of index 0
         07-13 16:01:16.220: INFO/System.out(4837): cube i = 1
         07-13 16:01:16.220: INFO/System.out(4837): 0.0 //Contents of i 1
         07-13 16:01:16.220: INFO/System.out(4837): cube i = 2
         07-13 16:01:16.220: INFO/System.out(4837): 0.0 //Contents of i 2
         07-13 16:01:16.220: INFO/System.out(4837): cube i = 3
         07-13 16:01:16.230: INFO/System.out(4837): 0.0 //Contents of i 3

Итак, как вы можете видеть ... Когда я присваиваю значения, они просто ... не присваиваются индексам ... почему? Все индексы остаются равными 0.0

Ответы [ 2 ]

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

У вас там i ++.Так что учтите это

Global.cam[i] = highx;
DebugPrint("cube i = " + cam[i]);
i++;

В противном случае вы ссылаетесь на СЛЕДУЮЩИЙ каждый раз.

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

Это связано с моим предыдущим ответом ( ссылка на вопрос ; обязательно проверьте и первую редакцию), поэтому я частично ответственен за путаницу.

Давайте вернемся назад и рассмотрим следующий фрагмент:

    char[] arr = new char[3];
    int index;

    index = 0;
    arr[index]   = 'A';
    arr[index+1] = 'B';
    arr[index+2] = 'C';
    System.out.println(arr); // "ABC"

    index = 0;
    arr[index++] = '1';
    arr[index++] = '2';
    arr[index++] = '3';
    System.out.println(arr); // "123"

В первой части фрагмента index остается прежним, и мы вручную пишем index+1, +2 и т. Д. По мере необходимости.Во втором фрагменте мы просто используем index++.Оба метода «работают» при назначении элементов в массив при увеличении индексов, но, возможно, ++ немного «лучше», потому что программист не должен вручную делать приращение.Кроме того, версия index++ позволяет мгновенно изменить порядок операторов, тогда как явная версия index+n потребует перенумерации.

В зависимости от того, что необходимо сделать, существуют лучшие альтернативы любому из вышеперечисленных,конечно.

В самом идеальном сценарии вы можете использовать специальный синтаксис инициализатора массива:

    char[] arr = { 'X', 'Y', 'Z' };
    System.out.println(arr); // "XYZ"

В операторе пост-инкремента

Возможно, этофрагмент кода проливает некоторый свет:

    char[] arr = { '1', '2', '3' };
    int index = 0;

    System.out.println(index);        // "0"
    arr[index++] = 'X';
    System.out.println(index);        // "1"

    System.out.println(arr[index]);   // "2"
    System.out.println(arr[index-1]); // "X"
    System.out.println(arr[0]);       // "X"

Средняя часть является ключом к пониманию проблемы: после назначения index увеличивается на 1. Именно поэтому arr[index] равно 2,что является старым значением arr[1].Новое значение X правильно присвоено arr[0], или, в более общем смысле, arr[index-1] сразу после назначения.

Ссылки

Связанные вопросы

Эти вопросы относятся к оператору постинкремента:

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