如何在没有应用程序崩溃的情况下声明和分配数组?

时间:2012-02-01 18:36:51

标签: java android arrays object loops

基本上,我正在为我的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//

任何帮助将不胜感激!!提前谢谢!

4 个答案:

答案 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++)