3 回答
TA贡献1804条经验 获得超3个赞
我在这里有一个稍微不同的建议:不要将边框放入数据中。
如果你想明天有“*”而不是那些 1 怎么办?!那么你就崩溃了,因为你有一个 int 数组,而不是 chars 数组?!
含义:您实际上应该将数据和打印格式分开。
当然,这会使打印变得更加复杂(或者不会,见下文),但是你的方法确实会产生很多丑陋的后果。例如:如果您想在某个时刻将该矩阵传递给某些“计算”代码怎么办?然后,该计算代码必须知道您的“边界”在该数据中的位置/方式,以将其从计算中排除。或者当您决定将“文本控制台”程序转变为 GUI 应用程序时?然后你可能真的会画一条边界线......但你会继续携带包含那些“边界线”字符(双关语)的矩阵。
因此,为什么不去:
printTopLine();
for (int[] rows : gameboard) {
printRow(row);
在哪里
public void printTopLine() {
...println("1111...
}
和
public void printRow(int[] values) {
print("1");
for (int v : values) print(v);
print("1");
}
正如您所看到的:这实际上非常简单,每当您决定:我想以不同的方式打印内容时,您只需进入并更改必要的内容,而无需担心 2D 数组中的数据!
所以,长话短说:您可以更改代码,以便您的 2D 矩阵仅与游戏板的值有关,以及如何“显示”完全由其他代码完成!
TA贡献1801条经验 获得超15个赞
这里有几件事:
内部循环应该迭代内部长度:
for(int y = 0; y < gameboard[0].length; y++)
代替:
for(int y = 0; y < gameboard.length; y++)
您不能将数组分配给
int
,类型必须匹配。gameboard[0][y] = gameboard[1];
这不会做你想做的事:
gameboard[x][y] = x + y;
。它分配索引的总和。
由于它是一个正方形(两个长度相等),因此您可以迭代一次:
for (int x = 0; x < gameboard.length; x++) { gameboard[0][x] = 1; gameboard[11][x] = 1; gameboard[x][0] = 1; gameboard[x][11] = 1; }
在此之前,你们的工作时间是一样的gameboard.length
。
您还应该正确打印它:
for (int[] a : gameboard) { for (int x :a) { System.out.print(x); } System.out.println(); }
TA贡献1817条经验 获得超6个赞
public static void main(String[] args) {
char border = '1';
char fillCharaters = '0';
int gridLength = 12;
int gridWidth = 12;
char[][] arr = new char[12][12];
Random random = new Random();
for (int j=0; j<gridWidth ; j++){
for (int i=0;i<gridLength;i++){
if(j==0||j==gridWidth-1||i==0||i==gridLength-1){
arr[j][i] = border;
} else {
arr[j][i] = fillCharaters;
}
}
//To print the random characters in the 10X10 grid
int r = random.nextInt(11);
arr[j][r] = border;
}
print2DMatrix(arr);
}
public static void print2DMatrix(char mat[][])
{
for (int i = 0; i < mat.length; i++)
{
for (int j = 0; j < mat[i].length; j++){
if(j==mat[i].length-1){
System.out.println(mat[i][j]);
} else{
System.out.print(mat[i][j]);
}
}
}
}
添加回答
举报