为此初始化(和调用)某种2D数组:

时间:2010-08-02 13:10:49

标签: java

当我LogCat以下我认为将大小输出与冒号左边的相应字段标签联系起来会很好,例如,“这是红色组件:[EGL10.EGL_RED_SIZE],”等等。

int[] attrib = { 
    EGL10.EGL_RED_SIZE, 
    EGL10.EGL_GREEN_SIZE, 
    EGL10.EGL_BLUE_SIZE, 
}; 

for(int n = 0; n < 3; n++){
    egl.eglGetConfigAttrib(eglDisplay, config[0], attrib[n], some_value);
    Log.v(TAG, String.format("SIZE = %d", some_value[0]));
}

显然目前我只输出:

5
6
5

......等等。

或者,我可以创建一个'attribDefs'数组,该数组加载了与attrib数组分开的硬编码字段描述符,并且只是在LogCat上连接结果 - 这可能甚至是一个更好的解决方案。

我只是想知道2D阵列的相同之处是什么;这样的2D构造如何在attrib数组中初始化? (这不是一个技巧问题或任何事情;我是一个Java菜鸟。)谢谢。

1 个答案:

答案 0 :(得分:2)

我不知道你在做什么,但也许这个片段有帮助:

    int[][] table = {
            { 1, },
            { 2, 3, },
            { 4, 5, 6 },
            { },
            { 7, },
    };
    for (int[] row : table) {
        int sum = 0;
        for (int num : row) {
            sum += num;
        }
        System.out.println("Row sum is " + sum);
    }

打印:

Row sum is 1
Row sum is 5
Row sum is 15
Row sum is 0
Row sum is 7

它使用“foreach”循环以提高可读性,因为此特定情况不需要显式索引。另请注意,Java没有“多维数组”,而是具有数组数组,这允许在此示例中出现锯齿状特征。

对于显式索引,除其他外,您可以执行以下操作:

    for (int i = 0; i < table.length; i++) {
        for (int j = 0; j < table[i].length; j++) {
            System.out.print(table[i][j] + " ");
        }
        System.out.println();
    }

打印:

1 
2 3 
4 5 6 

7 

每当你有选择时,你应该更喜欢“foreach”循环来显式索引,因为它更易读,更不容易出错。

参考

另见

  • Effective Java 2nd Edition,Item 46:首选每个循环到传统for循环