3 回答

TA貢獻1804條經驗 獲得超3個贊
我在這里有一個稍微不同的建議:不要將邊框放入數據中。
如果你想明天有“*”而不是那些 1 怎么辦?!那么你就崩潰了,因為你有一個 int 數組,而不是 chars 數組?!
含義:您實際上應該將數據和打印格式分開。
當然,這會使打印變得更加復雜(或者不會,見下文),但是你的方法確實會產生很多丑陋的后果。例如:如果您想在某個時刻將該矩陣傳遞給某些“計算”代碼怎么辦?然后,該計算代碼必須知道您的“邊界”在該數據中的位置/方式,以將其從計算中排除?;蛘弋斈鷽Q定將“文本控制臺”程序轉變為 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條經驗 獲得超16個贊
這里有幾件事:
內部循環應該迭代內部長度:
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]);
}
}
}
}
添加回答
舉報