二维字符数组初始化问题:如何正确设置char[0][0]为空格?
解决10×10二维char数组[0][0]位置的初始化问题
问题原因
你的代码中,第二次循环为行列标赋值时,当i=0会执行board[0][0] = K.charAt(0)(即把'0'赋值给该位置),覆盖了之前初始化的空格,导致[0][0]显示为'0'而非空格。
解决方案1:跳过i=0的赋值(推荐)
直接从i=1开始为第一行和第一列的非[0][0]位置赋值,保留[0][0]的空格初始化状态:
final int SIZE = 10; char[][] board = new char[SIZE][SIZE]; // 初始化所有位置为空格 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { board[i][j] = ' '; } } // 从i=1开始赋值行列标识,跳过[0][0] for (int i = 1; i < SIZE; i++) { char numChar = (char) ('0' + i); // 直接转换为字符,无需转String board[0][i] = numChar; board[i][0] = numChar; } // 打印数组 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { System.out.print(board[i][j]); } System.out.println(); }
解决方案2:循环后单独修正[0][0]
如果需要保留原循环结构,在循环结束后单独将[0][0]重新设为空格:
final int SIZE = 10; char[][] board = new char[SIZE][SIZE]; // 初始化所有位置为空格 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { board[i][j] = ' '; } } // 原循环赋值行列标识 for (int i = 0; i < SIZE; i++) { String K = Integer.toString(i); board[0][i] = K.charAt(0); board[i][0] = board[0][i]; } // 单独修正[0][0]为空格 board[0][0] = ' '; // 打印数组 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { System.out.print(board[i][j]); } System.out.println(); }
优化说明
方案1中用(char)('0' + i)直接将整数转换为对应字符,比通过Integer.toString(i)再取字符的方式更高效,减少了字符串对象的创建。
内容的提问来源于stack exchange,提问作者ruin
相关产品推荐
相关产品推荐

