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

如何在 Java 矩阵(二维数组)中的 10 x 10 0 矩阵周围制作 1 的“边界”

如何在 Java 矩阵(二维数组)中的 10 x 10 0 矩阵周围制作 1 的“边界”

慕盖茨4494581 2023-07-28 15:13:24
我是java新手,所以,请用清晰直接的答案回应。我制作了一个 12 x 12 的 0 矩阵。000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000我想用1秒的“栅栏”包围中间区域。111111111111100000000001100000000001100000000001100000000001100000000001100000000001100000000001100000000001100000000001100000000001111111111111我对 Java 很陌生,所以我只知道如何制作 12 x 12 并打印它,但现在如何制作栅栏。我还想知道如何使用循环在 10 x 10 0 网格内随机生成 10 个随机 1 。请帮忙!!!!这是我的代码:class Main { public static void main(String[] args){ int[][] gameboard = new int[12][12];// make gameboard int r_length = gameboard.length;//row length int c_length = gameboard[0].length;//column length for (int x = 0; x < gameboard.length; x++) {   for(int y = 0; y < gameboard.length; y++){     gameboard[x][y] = x + y;     gameboard[0][y] = gameboard[1]; //replace row 1 (not working)     gameboard[11][y] = gameboard[1]; //replace row 12 (not working)     gameboard[x][0] = gameboard[1]; //replace column 1 (not working)     gameboard[x][11] = gameboard[1]; //replace column 12 (not working)    }  } for (int[] a : gameboard) {   for (int x :a) {     System.out.print("0");    }   System.out.println();  }//gameboard printing }}
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

我在这里有一个稍微不同的建议:不要将边框放入数据中。


如果你想明天有“*”而不是那些 1 怎么办?!那么你就崩溃了,因为你有一个 int 数组,而不是 chars 数组?!


含义:您实际上应该将数据和打印格式分开。


当然,这会使打印变得更加复杂(或者不会,见下文),但是你的方法确实会产生很多丑陋的后果。例如:如果您想在某个时刻将该矩阵传递给某些“计算”代码怎么办?然后,该计算代码必须知道您的“边界”在该数据中的位置/方式,以将其从计算中排除。或者当您决定将“文本控制台”程序转变为 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 矩阵仅与游戏板的值有关,以及如何“显示”完全由其他代码完成!


查看完整回答
反对 回复 2023-07-28
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

这里有几件事:

  1. 内部循环应该迭代内部长度:

    for(int y = 0; y < gameboard[0].length; y++)

    代替:

    for(int y = 0; y < gameboard.length; y++)
  2. 您不能将数组分配给int,类型必须匹配。

    gameboard[0][y] = gameboard[1];
  3. 这不会做你想做的事: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();
  }


查看完整回答
反对 回复 2023-07-28
?
慕的地6264312

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

            }

        }       

    }    


查看完整回答
反对 回复 2023-07-28
  • 3 回答
  • 0 关注
  • 129 浏览

添加回答

举报

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