Java 初始化二维对象数组时出现问题

Java 初始化二维对象数组时出现问题,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我在一个使用2d对象数组的项目中遇到了问题 对象构造函数: public BlackoutWindow(boolean l, int r, int c) { lightOn = l; row = r; column = c; 初始化for循环时出现问题: for (int i=0; i < r; i++) { for (int j=0; j < c; j++) { board[i][j] = new Black

我在一个使用2d对象数组的项目中遇到了问题

对象构造函数:

public BlackoutWindow(boolean l, int r, int c) {
    lightOn = l;
    row = r;
    column = c;
初始化for循环时出现问题:

    for (int i=0; i < r; i++) {
        for (int j=0; j < c; j++) {
            board[i][j] = new BlackoutWindow(Math.random() > 0.5, i, j);
        }
    }
然后,输出看起来是正确的,但它把程序的其余部分弄乱了,通常没有意义

以下是BlackOuthinow类的draw()方法:

public void draw()
{
    StdDraw.setPenColor(lightOn ? StdDraw.YELLOW : StdDraw.BLACK);
    StdDraw.filledRectangle(row+0.5,column+0.5, 0.5, 0.5);
}
下面是包含for循环的另一个Gameboard类的draw方法:

public void draw()
{
    for (int i=0; i < this.board.length; i++) {
        for (int j=0; j < this.board[0].length; j++) {

            board[i][j].draw(); 
        }
    }
}
public void draw()
{
for(int i=0;i
您拥有的代码将
i
视为行,将
j
视为列。因此,我们将
i
视为垂直变量,将
j
视为水平变量

基本绘图方法(StdDraw.filledRectangle中的方法)将前两个参数作为笛卡尔坐标系的坐标

因此,该系统中的第一个坐标(通常称为
x
)是指水平轴,第二个坐标(一个
y
)是指垂直轴上的装置

因此,当您用
j
交换
i
时,效果很好,因为
i
-行指的是垂直坐标,
j
-列指的是水平坐标

为了确保这一点,我查看了StdDraw.filledRectangle的值,作为标准,第一个参数是指笛卡尔坐标系的x坐标,第二个参数是指y坐标


您没有说明为什么交换会把其余部分弄糟,为什么没有意义,但希望通过上面的解释,它是有意义的(如果没有,请评论,我将尝试告诉更多)为什么它会弄乱其余的部分?

很清楚,BlackOuthinow方法中的i和j用于保持位置,它们应该与数组索引值匹配,但它们似乎只占两个值中较小的值。因此,对于r=5,c=7,绘制的网格仅显示为5x5,而不是预期的5x7。分配板值的for循环看起来不错。所以问题一定出在画它的方法上,我们现在看不到这个方法。请包括绘图方法。@不是我编辑了这篇文章以包括两种绘图方法。这一种看起来也不错。
blackouthindow
的绘制方法如何?如果您说在调用构造函数时交换i和j是有效的,那么预处理的问题就在该方法内部。@不是我在另一个draw方法正上方的编辑中包含了该方法。它很短很简单,只需使用StdDraw绘制一个填充矩形。谢谢!!!!这澄清了这段时间的问题!我一直在编码,目的是x和y分别是行和列!你的帖子为我清理了一切,我做了编辑,现在它运行得很好!你最好!对不起,我本想接受的,但我现在已经接受了!I+1,但显然是因为我的重复次数不到15次,所以它没有显示,但说它确实录制了!再次感谢!
public void draw()
{
    for (int i=0; i < this.board.length; i++) {
        for (int j=0; j < this.board[0].length; j++) {

            board[i][j].draw(); 
        }
    }
}