为了账号安全,请及时绑定邮箱和手机立即绑定

仅打印 (n*n) 数组的非边界和角元素

仅打印 (n*n) 数组的非边界和角元素

炎炎设计 2023-08-09 15:52:48
我要编写一个程序,仅打印 (n*n) 数组的非边界和角元素,用于我的作业,这是代码的主要部分: 我得到的输出是这样的:正如您所看到的,非边界元素(6,7,10,11)没有处于正确的位置,我相信这是因为循环内制表符空格的打印不正确。(我的代码完全是一团糟)我想要一些帮助或建议来解决这个问题。谢谢!
查看完整描述

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) {

//...

}


查看完整回答
反对 回复 2023-08-09
?
繁花不似锦

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 允许填充数字。


查看完整回答
反对 回复 2023-08-09
?
红颜莎娜

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();

    }


查看完整回答
反对 回复 2023-08-09
?
catspeake

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();

    }


查看完整回答
反对 回复 2023-08-09
  • 4 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信