将1维数组渲染为网格?

时间:2015-12-23 21:44:27

标签: java

我可以在网格中绘制二维数组,如下所示:

int[][] foo = new int[10][10];

// assume the array is full of data
for (int x = 0; x < 10; x++) {
    for (int y = 0; y < 10; y++) {
        g.setColor(new Color(foo[x][y] & 255, foo[x][y] & 255, foo[x][y] & 255));
        g.fillRect(x * 50, y * 50, 50, 50);
    }
}

我有什么方法可以做同样的事情 一维数组?有什么神奇的吗? 数学运算我可以做每次迭代, 或者我必须将其填入二维数组 手动?

3 个答案:

答案 0 :(得分:1)

不确定。考虑一个按顺序分配值的网格,如下所示:

[ 0] [ 1] [ 2] [ 3]
[ 4] [ 5] [ 6] [ 7]
[ 8] [ 9] [10] [11]
[12] [13] [14] [15]

每行从4r开始,该行中的每一列只添加一个偏移量。因此,index = 4r + c,其中r和c都是基于0的。系数4来自每行的宽度;因为每行有4个元素,所以每行的开头比前一行的开头大4。

用Java术语来说,你有:

int index = width * y + x;
int f = foo[index];

例如,上面的单元格[14]位于x = 2,y = 3(请记住,这些值是0索引的)。插入宽度= 4我们得到:

index = width * y + x
      =   4   * 3 + 2
      =   14

答案 1 :(得分:0)

如果你想在每行的X元素网格中打印一个1-dim数组,你可以做这样的事情

int[][] foo = new int[20];

for (int x = 0; x < 20; x++) {
    if(x % 5 == 0 && x != 0) //so when x is 5, 10, 15, 20
        //go in a new line
}

所以你会有像

这样的东西
foo[0]  foo[1]  foo[2]  foo[3]  foo[4] 
foo[5]  foo[6]  foo[7]  foo[8]  foo[9] 
foo[10] foo[11] foo[12] foo[13] foo[14] 
foo[15] foo[16] foo[17] foo[18] foo[19] 

答案 2 :(得分:0)

您可以使用余数和除法。如果增加索引,则每次上升到宽度-1时,余数将增加1,然后再次为0。如果索引/宽度达到下一个完全除法,则除法值将增加1.

int width=10;
for (int index = 0; index < 100; index++) {
        g.setColor(Color.RED);
        g.fillRect((index%width) * 50, (index/width) * 50, 50, 50);
}