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条经验 获得超12个赞
试试这个我已经优化了你的 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();
}
添加回答
举报