Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除二维阵列中的元素_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 如何删除二维阵列中的元素

Java 如何删除二维阵列中的元素,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有一个2D数组,我需要在每次tic tac toc游戏开始时“重置”。我调用一个方法并循环数组,将所有元素设置为零。但这违背了我的程序的目的,因为我需要让所有元素再次为空/空 public static char[][] initializeGame(char[][] gameBoard) { for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) {

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

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;
}
publicstaticchar[]initializeGame(char[]gameBoard){
对于(int行=0;行<3;行++){
for(int col=0;col<3;col++){

gameBoard=null;//如果您询问如何将2D数组中单个元素的值更改为null,您可以执行以下操作:

 gameBoard[row][col] = null;
但是,由于您有一个2D char数组,您不能这样做,因为char是一种基本类型,不允许有空值。您可以使用不同的char值来表示空值,也可以使2D数组具有字符对象,但更好的解决方案可能是枚举类型的2D数组,例如:

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

不能将char设置为null。只能将其设置为0。null是指针值,char是基元数值。指针不适合基元值。 所以:
游戏板[行][列]=0
应该这样做。

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

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

这是因为它是一种基本类型。没有意识到你有一个字符数组,我编辑了这篇文章,为你可以将其更改为的内容添加了一些建议。谢谢!我会尝试将其设置为0,但是我们需要使用一个方法来处理游戏中的每个回合。每当数组中的3行/列/对角线相等时,该方法返回true因此,如果您真的在谈论Java,那么将其设置为0将始终返回true
gameBoard=new int[3][3]
不应该是个问题。实际上,这应该比重置所有元素都要快。即使如此,我也不知道为什么我们需要担心这里的性能,它只是一个3X3数组。这可能是最快的操作,但是如果在应用程序中重新初始化数组太多,那么会占用更多内存,并且您无法知道是否存在错误或者确定那些“null”是否会被释放
null
意味着什么都没有,可以真正释放它。但是如果你说的是符合gc条件的对象,gc足够聪明,可以尽早收集它。
 Arrays.fill(gameBoard, '\0'); //Fills the array with Null characters