Java 如何删除二维阵列中的元素
我有一个2D数组,我需要在每次tic tac toc游戏开始时“重置”。我调用一个方法并循环数组,将所有元素设置为零。但这违背了我的程序的目的,因为我需要让所有元素再次为空/空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++) {
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将始终返回truegameBoard=new int[3][3]
不应该是个问题。实际上,这应该比重置所有元素都要快。即使如此,我也不知道为什么我们需要担心这里的性能,它只是一个3X3数组。这可能是最快的操作,但是如果在应用程序中重新初始化数组太多,那么会占用更多内存,并且您无法知道是否存在错误或者确定那些“null”是否会被释放null
意味着什么都没有,可以真正释放它。但是如果你说的是符合gc条件的对象,gc足够聪明,可以尽早收集它。
Arrays.fill(gameBoard, '\0'); //Fills the array with Null characters