【发布时间】:2013-12-29 18:54:14
【问题描述】:
我刚刚遇到了 for 循环的奇怪行为,找不到解释。
我有一个 2D 游戏,这个逻辑元素是一个字段。
//Declaration of the JPanel logical size.
private int[][] grid = new int[24][12];
行数是24,对吧?
我正在使用这个来绘制这个网格:
for (int r = 0; r < grid.length; r++ )
for (int c = 0; c < grid[r].length; c++)
然后我决定不画最后一行并这样做:
r < grid.length - 1;
什么也没发生。我想也许我需要括号。我添加了它们,但它仍然不起作用。 然后我把它改成
r < grid.length - 2;
在这种情况下,最后一行没有按照我最初的意愿绘制。
但现在我很困惑,因为在数学上:grid.length - 2 = 22; r
测试用例:
class Action extends JPanel {
public static final int FRAME_SIZE_X = 370;
public static final int FRAME_SIZE_Y = 720;
private int[][] grid = new int[24][12];
public Action() { //Setting everything for JPanel
Dimension actionDimension = new Dimension(360, 690);
setPreferredSize(actionDimension);
setVisible(true);
//...
}
@Override
protected void paintComponent(Graphics pen) {
super.paintComponent(pen);
for (int r = 0; r < grid.length - 2; r++) //Line with a problem
for (int c = 0; c < grid[r].length; c++) {
// [set up pen, etc.]
// draw line
pen.drawRect(c * 30, r * 30, FRAME_SIZE_X / 12, FRAME_SIZE_Y / 24);
}
}
}
【问题讨论】:
-
肯定还有别的。这应该可以按预期工作。
-
你不想用
grid[r].length代替grid[c].length吗? -
你应该用
grid[r].length;而不是我认为的c来绘制你的网格.. -
不,在这种情况下,我不绘制列。我说的是行。
-
那个shouldn't make a difference。每行的列数完全相同,
grid[r]的长度与grid[c]的长度相同。
标签: java multidimensional-array