java中的2D对象数组
我想创建由接口字段实现的对象的2D数组,但它不会通过编译运行。我得到的错误是:java中的2D对象数组,java,arrays,object,multidimensional-array,interface,Java,Arrays,Object,Multidimensional Array,Interface,我想创建由接口字段实现的对象的2D数组,但它不会通过编译运行。我得到的错误是:java.lang.ArrayIndexOutOfBoundsException:9在我分配this.field[i][j]=this.border的行上。这些是我的文件: Board.java: package board; public class Board { private int size; private Field [][] field; private BoardField board; priva
java.lang.ArrayIndexOutOfBoundsException:9
在我分配this.field[i][j]=this.border的行上。这些是我的文件:
Board.java:
package board;
public class Board {
private int size;
private Field [][] field;
private BoardField board;
private BorderField border;
public Board(int size){
this.field = new Field[size+1][size+1];
this.size = size;
for(int i = 0; i <= size +1; i++){
for(int j = 0; i <= size +1; j++){
if(i == 0 || j == 0 || (i == size +1) || (j == size +1)){
this.border = new BorderField();
this.field[i][j] = this.border;
}
else {
this.board = new BoardField(i, j);
this.field[i][j] = this.boar;
}
}
}
}
public static void main (String[] args)
{
Board board = new Board(8);
}
}
BoardField.java:
package board;
public class BoardField implements Field {
boolean diskOnField;
int row;
int col;
public BoardField(int row, int col){
this.row = row;
this.col = col;
diskOnField = false;
}
}
package board;
public class BorderField implements Field {
public BorderField(){}
}
package board;
public interface Field {
public static enum Direction {
L,LU,U,RU,R,RD,D,LD;
}
}
Field.java:
package board;
public class BoardField implements Field {
boolean diskOnField;
int row;
int col;
public BoardField(int row, int col){
this.row = row;
this.col = col;
diskOnField = false;
}
}
package board;
public class BorderField implements Field {
public BorderField(){}
}
package board;
public interface Field {
public static enum Direction {
L,LU,U,RU,R,RD,D,LD;
}
}
您指定了this.field=新字段[size+1][size+1]
,因此此.field[size+1]
超出范围,如果不引发异常,则无法访问它
也许您需要:(将size+1更改为size
)
用于(int i=0;我首先int j=0;我感谢你的输入错误,但我不确定你为什么要谈论长度,因为我没有在那里使用它。我想做的是在数组的边界上有BorderField-s,而在数组的中心有BorderField-s。另外,你不能访问超出其边界的数组。请阅读链接问题。size+1是故意的,在边框上我想创建BorderField对象,在中间我想创建BorderField对象增加数组的元素数。“也许你想要这个”这不是一个好的、有用的答案。链接的副本更好地解释了这一点。增加元素的数量有帮助…但我不确定我一定是放在那里了this.field=newfield[size+2][size+2]
。例如,我们得到了8x8大小的字段,那么为什么this.field=newfield[size+1][size+1]
不适用于我,因为大小将为9,我可以在其中放置10个对象(2个用于边框),字段[0]…字段[9]=10个对象。请解释一下,这是因为如果数组的索引在允许范围内,您可以访问数组的元素;如果数组的索引不在允许范围内,您无法访问数组的“元素”。