创建一个方形的二维数组

Create a 2d array in a square shape

我必须创建一个二维数组,如图所示:

我正在尝试这样,但我不确定:

public static void main(String[] args) {
    String[][] zeile1 = {"- - - - - - -"};
    String[][] zeile2 = {"|           |"};
    String[][] zeile3 = {"|           |"};
    String[][] zeile4;
}

模式

这里的模式是

  • 在第一行和最后一行中,您必须打印破折号 "-"
  • 在第一列和最后一列中,您必须打印 "|"
  • 对于此处的其他字段,我们只打印空格 " ";

解决方案

  • 所以你声明了一个二维数组

String[][] grid = new String[5][5]; // chose your dimension
  • 通过两个维度初始化您的网格循环并检查 Pattern.
    部分中提到的 3 种情况 注意 i对应你的行,j对应你的列 这意味着 i=0 是第一行,grid.length-1 是最后一行 这同样适用于列。

if (i == 0 || i == grid.length - 1) {
    grid[i][j] = "-";
} else if (j == 0 || j == grid[i].length - 1) {
    grid[i][j] = "|";
} else {
    grid[i][j] = " ";
}

代码

public static void main(String[] args) {
    String[][] grid = new String[5][5];
    for (int i = 0; i < grid.length; i++) {
        for (int j = 0; j < grid[i].length; j++) {
            if (i == 0 || i == grid.length - 1) {
                grid[i][j] = "-";
            } else if (j == 0 || j == grid[i].length - 1) {
                grid[i][j] = "|";
            } else {
                grid[i][j] = " ";
            }
        }
    }
}

输出

-----
|   |
|   |
|   |
-----

如果我对问题的理解正确,我会提出这个解决方案:

  • 从概念上讲,您需要两个函数:
  • 一个初始化下限和上限---------------
static void initialiseCeilingAndFloor(char plane[][], int n) {
    for (int i = 0; i < plane.length; i++) {
        plane[0][i] = '-'; // ceiling is initialised
        plane[plane.length - 1][i] = '-'; //floor is initialised
    }
}

另一个每面墙画一条线|. . . . . . . . .|。 在这里,为了清楚起见,我实际上将这个方法一分为二:InitialiseInternalRow 做它所说的,而 InitialiseBody 使用它来初始化整个飞机

static void initialiseBody(char plane[][]) {
    // we already initialised floor and ceiling, so here we'll
    for (int i = 1; i < plane.length - 1; i++) {
        // reduce the cycle at the internal lines
        initialiseInternalRow(plane, i);
    }
}
static void initialiseInternalRow(char plane[][], int i) {
    for (int j = 0; j < plane.length; j++) {
        // if we are at the extremes, we draw a wall: '|'
        if (j == 0 || j == plane.length - 1)
            plane[i][j] = '|';
        else // otherwise we leave space
            plane[i][j] = ' ';
    }
}

以便您可以轻松地在 main:

中初始化数组
char plane[][] = new char[n][n];
initialiseCeilingAndFloor(plane);
initialiseBody(plane);

您甚至可以考虑将这两种方法包装在一起以一次性初始化事物,如下所示:

static void initialisePlane(char plane[][]) {
    initialiseCeilingAndFloor(plane);
    initialiseBody(plane);
}

这样您就可以轻松地从您的主电话:

char plane[][] = new char[n][n];
initialisePlane(plane);

如果您的终端将输出更多地显示为矩形,请不要担心。这取决于您用来显示文本的特定应用程序所使用的格式。只需将 space 替换为点,然后计算它们。 这里是认真的测试。

您可以使用流来创建这样的数组:

int m = 5;
String[][] arr = IntStream.range(0, m)
        .mapToObj(i -> IntStream.range(0, m)
                .mapToObj(j -> {
                    String val = " ";
                    if (i == 0 || i == m - 1) {
                        val += "-";
                    } else if (j == 0 || j == m - 1) {
                        val += "|";
                    } else {
                        val += " ";
                    }
                    return val;
                }).toArray(String[]::new))
        .toArray(String[][]::new);
// output
Arrays.stream(arr).map(row -> String.join("", row)).forEach(System.out::println);

输出:

 - - - - -
 |       |
 |       |
 |       |
 - - - - -

另请参阅:

Drawing a rectangle with asterisks using methods and loops