【问题标题】: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++)
      

      【讨论】:

        猜你喜欢
        • 2021-11-02
        • 1970-01-01
        • 2011-02-10
        • 2012-07-27
        • 2016-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多