4 回答

TA貢獻1793條經驗 獲得超6個贊
我通常發現扁平化事物(特別是 if 條件)并將條件放入布爾返回方法中會有所幫助。嘗試類似的東西
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++ {
if (isCorner(i,j,n) || !isEdge(i,j,n)) {
//...
} else {
//...
}
}
System.out.println();
}
其中isCorner(i,j,n)和 的isEdge(i,j,n)定義類似于
public boolean isCorner(int row, int column, int gridSize) {
//...
}

TA貢獻1851條經驗 獲得超4個贊
如果您找到了解決方案,只是缺少空格,我將添加一些聰明的東西:
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
boolean visible = (i % (n - 1) == 0) == (j % (n - 1) == 0);
if (visible) {
System.out.printf(" %4d", a[i][j]);
} else {
System.out.print(" ");
}
}
System.out.println();
}
盡管我在這里使用了空格,但制表符不再有任何問題"\t"。
保持簡單,太多的情況只會導致問題 - 正如您所經歷的那樣。這里的技巧是考慮是否打印。因此我從一個變量開始visible。
邊界條件
i == 0 || i == n - 1
也可以用模寫為
i % (n - 1) == 0
如果這“太聰明”了,很難理解閱讀:
boolean iOnBorder = i % (n - 1) == 0;
boolean jOnBorder = j % (n - 1) == 0;
boolean visible = iOnBorder == jOnBorder;
“X”模式檢查 i-on-border 和 j-on-border 的 _equivalence。
其余的:格式化的 printf 允許填充數字。

TA貢獻1842條經驗 獲得超13個贊
試試這個我已經優化了你的 if 條件
不需要再次檢查i == 0ori == n-1
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==0 || i==n-1){
if(j==0 || j==n-1){
System.out.print(a[i][j]);
}
}else{
if(j != 0 && j!= n-1){
System.out.print(a[i][j]);
}
}
System.out.print("\t");
}
System.out.println();
}

TA貢獻1111條經驗 獲得超0個贊
試試這個我已經優化了你的 if 條件
不需要再次檢查i == 0ori == n-1
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==0 || i==n-1){
if(j==0 || j==n-1){
System.out.print(a[i][j]);
}
}else{
if(j != 0 && j!= n-1){
System.out.print(a[i][j]);
}
}
System.out.print("\t");
}
System.out.println();
}
添加回答
舉報