基本上,我正在为我的13年级课程实现android的反转应用程序,这段代码用于设置这里显示为类位置数组的棋盘。但是,运行时,应用程序崩溃。
Position[][] board = new Position[7][7]; //declaring the board//
for(int n = 0; n < 8; n ++){
...
for(int i = 0; i < 8; i++ ){
final ImageView button = new ImageView(this);
final int countN = n;
final int countI = i;
board[countI][countN].isPositionEmpty = true; //assigning a value//
任何帮助将不胜感激!!提前谢谢!
答案 0 :(得分:5)
您只分配了一个7x7阵列,但是您尝试将其用作8x8阵列。
更改使用:
Position[][] board = new Position[8][8];
或者最好有一个在多个地方使用的常数:
private static final int BOARD_SIZE = 8;
...
Position[][] board = new Position[BOARD_SIZE][BOARD_SIZESIZE];
for (int i = 0; i < BOARD_SIZE; i++)
{
...
}
像这样的数组分配:
Foo[] array = new Foo[size];
创建一个包含size
元素的数组;有效索引的范围为0到size - 1
。
答案 1 :(得分:4)
你也必须对矩阵的每个索引进行实例化。
for(int i = 0; i < 8; i++ ){
board[countI][countN] = new Position();
board[countI][countN].isPositionEmpty = true; //assigning a value//
}
答案 2 :(得分:2)
// Bad:
Position[][] board = new Position[7][7];
for(int i = 0; i < 8; i++ ){
...
// Better:
Position[][] board = new Position[8][8];
for(int i = 0; i < 8; i++ ){
...
// Best:
Position[][] board = new Position[8][8];
for(int i = 0; i < board[0].length; i++ ){
...
PS:
您不仅需要初始化数组(为“容器”的每一行和每一列分配空间);你*还需要初始化数组的每个元素(例如“array [i] [j] = new Position()”)。
答案 3 :(得分:1)
你的for循环从0到7,实际上是8个单元格。所以你需要8个位置对象。
Position[][] board = new Position[8][8]
或者如果你想要它是一个7乘7的板,你需要停在第6个索引
for (int i =0; i <7 ; i++)