我正在尝试渲染一个网格,特别是一个9行17列的2D字符数组。最左边的列和最上面的行用于显示网格坐标A-H和1-8。
然而,每次我渲染网格时,都会出现这些“null”值。例如:1 2 3 4 5 6 7 8。它们出现在栅格中的每个空间中。
下面是代码部分:
import java.util.List;
public class Renderer {
private static final char[] COL_LABELS = {'1','2','3','4','5','6','7','8'} ;
private static final char[] ROW_LABELS = {'A','B','C','D','E','F','G','H'} ;
private static final char DEFAULT = '·' ;
private static final char HIT = '◉' ;
private static final char MISS = '~' ;
public static final int GRID_WIDTH = 17;
public static final int GRID_HEIGHT = 9;
private static int cellCol2GridCol(int cellCol) {
return 2 + (2 * cellCol);
}
private static int cellRow2GridRow(int cellRow) {
return 1 + cellRow ;
}
public static char[][] renderEmptyGrid() {
char[][] grid = new char[GRID_HEIGHT][GRID_WIDTH];
// Draw the header row
for (int cellCol = 0; cellCol < GRID_HEIGHT - 1; cellCol++) {
int gridCol = cellCol2GridCol(cellCol);
grid[0][gridCol] = COL_LABELS[cellCol];
}
// Draw the header column
for (int cellRow = 0; cellRow < GRID_HEIGHT - 1; cellRow++) {
int gridRow = cellRow2GridRow(cellRow);
grid[gridRow][0] = ROW_LABELS[cellRow];
}
// Fill the rest of the grid with the DEFAULT character
for (int i = 1; i < GRID_HEIGHT; i++) {
for (int j = 2; j < GRID_WIDTH; j += 2) {
grid[i][j] = DEFAULT;
}
}
return grid;
}
还有这两个helper方法:
静态cellCol 2GridCol方法,它接受有效的单元格列(即0-7的int)作为输入,并返回2d数组中相应的列索引(即0-7的int)。0-16的整数)。
静态cellRow 2GridRow方法,它接受有效的单元格行(即0-7的整数)作为输入,并返回2D数组中的对应行索引(即,0-8的整数)。
我开始用空格字符填充数组。然后用正确的字符替换一些空格。
我知道我不能直接把1或2这样的数字放到一个char数组中;它将最终打印代码为1或2的ASCII字符,而不是1或2。所以我使用了存储在Renderer.COL_LABELS中的字符。
1条答案
按热度按时间xuo3flqw1#
这里是 grid[0]。
奇数索引处的值从未被分配 char 值,因此仍然是 null-或者更准确地说,'\u0000'。
这是因为你在下面的 * for循环 * 中递增了 2。
我不知道你是否打算有额外的,空的细胞。
您已将 GRID_WIDTH 设置为 17,但列的范围为 1 到 8。
这是另一种生成相同网格的方法。
然后,您可以使用以下命令打印网格。
输出量