java中的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

我想创建由接口字段实现的对象的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;
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个对象。请解释一下,这是因为如果数组的索引在允许范围内,您可以访问数组的元素;如果数组的索引不在允许范围内,您无法访问数组的“元素”。