【问题标题】:How to declare and assign an array without the app crashing?如何在应用程序不崩溃的情况下声明和分配数组?
【发布时间】:2012-02-01 18:36:50
【问题描述】:
基本上,我正在为我的 13 年课程作业实现一个适用于 android 的黑白棋应用程序,这段代码的 sn-p 旨在设置板,此处显示为班级位置的数组。但是,在运行时,应用程序会崩溃。
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//
任何帮助将不胜感激!提前致谢!
【问题讨论】:
标签:
java
android
arrays
object
loops
【解决方案1】:
您只分配了一个 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 范围内。
【解决方案2】:
您也必须实例化矩阵的每个索引。
for(int i = 0; i < 8; i++ ){
board[countI][countN] = new Position();
board[countI][countN].isPositionEmpty = true; //assigning a value//
}
【解决方案3】:
// 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()”)。
【解决方案4】:
您的 for 循环从 0 变为 7,这实际上是 8 个单元格。所以你需要 8 个位置对象。
Position[][] board = new Position[8][8]
或者如果您希望它是 7 x 7 板,您需要停在第 6 个索引处
for (int i =0; i <7 ; i++)