3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
我在這里有一個(gè)稍微不同的建議:不要將邊框放入數(shù)據(jù)中。
如果你想明天有“*”而不是那些 1 怎么辦?!那么你就崩潰了,因?yàn)槟阌幸粋€(gè) int 數(shù)組,而不是 chars 數(shù)組?!
含義:您實(shí)際上應(yīng)該將數(shù)據(jù)和打印格式分開(kāi)。
當(dāng)然,這會(huì)使打印變得更加復(fù)雜(或者不會(huì),見(jiàn)下文),但是你的方法確實(shí)會(huì)產(chǎn)生很多丑陋的后果。例如:如果您想在某個(gè)時(shí)刻將該矩陣傳遞給某些“計(jì)算”代碼怎么辦?然后,該計(jì)算代碼必須知道您的“邊界”在該數(shù)據(jù)中的位置/方式,以將其從計(jì)算中排除?;蛘弋?dāng)您決定將“文本控制臺(tái)”程序轉(zhuǎn)變?yōu)?GUI 應(yīng)用程序時(shí)?然后你可能真的會(huì)畫(huà)一條邊界線......但你會(huì)繼續(xù)攜帶包含那些“邊界線”字符(雙關(guān)語(yǔ))的矩陣。
因此,為什么不去:
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");
}
正如您所看到的:這實(shí)際上非常簡(jiǎn)單,每當(dāng)您決定:我想以不同的方式打印內(nèi)容時(shí),您只需進(jìn)入并更改必要的內(nèi)容,而無(wú)需擔(dān)心 2D 數(shù)組中的數(shù)據(jù)!
所以,長(zhǎng)話短說(shuō):您可以更改代碼,以便您的 2D 矩陣僅與游戲板的值有關(guān),以及如何“顯示”完全由其他代碼完成!

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
這里有幾件事:
內(nèi)部循環(huán)應(yīng)該迭代內(nèi)部長(zhǎng)度:
for(int y = 0; y < gameboard[0].length; y++)
代替:
for(int y = 0; y < gameboard.length; y++)
您不能將數(shù)組分配給
int
,類型必須匹配。gameboard[0][y] = gameboard[1];
這不會(huì)做你想做的事:
gameboard[x][y] = x + y;
。它分配索引的總和。
由于它是一個(gè)正方形(兩個(gè)長(zhǎng)度相等),因此您可以迭代一次:
for (int x = 0; x < gameboard.length; x++) { gameboard[0][x] = 1; gameboard[11][x] = 1; gameboard[x][0] = 1; gameboard[x][11] = 1; }
在此之前,你們的工作時(shí)間是一樣的gameboard.length
。
您還應(yīng)該正確打印它:
for (int[] a : gameboard) { for (int x :a) { System.out.print(x); } System.out.println(); }

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
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]);
}
}
}
}
添加回答
舉報(bào)