【问题标题】:How to remove an element in a 2D array如何删除二维数组中的元素
【发布时间】:2014-04-16 18:36:09
【问题描述】:

我有一个 2D 数组,每次启动 tic tac toc 游戏时我都需要“重置”它。我调用一个方法并循环遍历将所有元素设置为零的数组。但这违背了我的程序的目的,因为我需要让所有元素再次为空/null。

public static char[][] initializeGame(char[][] gameBoard) {       
    for (int row = 0; row < 3; row++) {
        for (int col = 0; col < 3; col++) {
            gameBoard = null; //<--THIS IS THE THING AM TRYING TO NULL @ gameBoard[row][column]               
        }
    }     
    return gameBoard;
}

如何将gameBoard的元素设置为null?

【问题讨论】:

    标签: java arrays multidimensional-array


    【解决方案1】:

    如果您询问如何将 2D 数组中单个元素的值更改为 null,您可以这样做:

     gameBoard[row][col] = null;
    

    但是由于您有一个 2D char 数组,因此您不能这样做,因为 char 是一种原始类型并且不允许有空值。您可以使用不同的 char 值来表示空,或者您可以使 2D 数组具有 Character 对象,但更好的解决方案可能是枚举类型的 2D 数组,例如:

    public enum TicTacToeSquareValue { x, o, empty }
    .... later on:
    gameBoard[row][col] = TicTacToeSquareValue.empty;
    

    【讨论】:

    • 那是因为它是原始类型。 stackoverflow.com/questions/9909333/…
    • 没有意识到你有一个 char 数组,我编辑了这篇文章,为你可以将其更改为的内容添加一些建议。
    【解决方案2】:

    如果你很懒,你可以重新实例化一个新数组。

    gameBoard = new int[3][3];
    

    我不推荐这种方法,因为如果没有正确收集它,它的性能会降低并且会泄漏内存。

    一个更优雅的选择是重新初始化整个数组,您不需要将值设置为null,因为它们的类型是char

    for(int r = 0; r < gameBoard.length; r++)
        for(int c = 0; c < gameBoard[r].length; c++)
            gameBoard[r][c] = '\0'; //Null character
    

    但是,既然有一个预构建的 Java 实用方法可以帮助您,为什么还要编写三行代码呢?

     Arrays.fill(gameBoard, '\0'); //Fills the array with Null characters
    

    【讨论】:

    • 如果您真的在谈论 Java,那么 gameBoard = new int[3][3]; 应该不是问题。实际上这应该比重置所有元素更快。即使这样我也不知道为什么我们需要担心这里的性能,它只是一个 3X3 数组。
    • 这可能是最快的操作,但是如果您在应用程序中过多地重新初始化数组,则会占用更多内存,您无法确定是否会释放那些'null'
    • null 没什么意思,真的可以放出来。但是如果你在谈论 gc 合格的对象,gc 足够聪明,尽早收集它。
    【解决方案3】:

    您不能将char 设置为null。您只能将其设置为0null 是一个指针值,char 是一个原始数值。指针不适合原始值。

    所以..

    gameBoard[row][col]=0
    

    .. 应该可以解决问题。

    【讨论】:

    • 我尝试将其设置为 0,但随后我们需要使用一种方法来处理游戏中的每一轮。只要数组中的 3 行/列/对角线相等,该方法就会返回 true。因此将其设置为 0 总是返回 true
    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2021-03-30
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多