Java 初始化二维对象数组时出现问题
我在一个使用2d对象数组的项目中遇到了问题 对象构造函数: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
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();
}
}
}