创建一个方形的二维数组
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
我必须创建一个二维数组,如图所示:
我正在尝试这样,但我不确定:
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