我可以在网格中绘制二维数组,如下所示:
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);
}
}
我有什么方法可以做同样的事情 一维数组?有什么神奇的吗? 数学运算我可以做每次迭代, 或者我必须将其填入二维数组 手动?
答案 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);
}