数组赋值问题

时间:2010-07-13 15:26:32

标签: java arrays floating-point

我有一个数组赋值的问题......

我在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 个答案:

答案 0 :(得分:5)

你有i ++。所以考虑一下这个

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

否则,您每次都会引用NEXT。

答案 1 :(得分:1)

这与我以前的答案有关(link to the question;请务必检查第一次修订),因此我对这种混淆负有部分责任。

让我们退一步考虑以下片段:

    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]

参考

相关问题

这些问题与增量后算子有关: