用二维数组打印空心矩形
Print hollow rectangle with a 2 dimensional array
我有这段代码可以使用二维数组打印一个矩形。如您所见,我手动编码了整个数组,而不是使用循环。我要找的是:
- 如何使用循环打印完全相同的矩形(带有星号、负号...)
- 创建此模板后,如果我想放置一个字符'?'在矩形内部,例如,我可以调用坐标 tab[5][4],这将打印它。
问题是一整列'?'印在模板外面。我该如何解决这个问题?
注意:我不想使用任何 java 的 Swing 或 AWT 库。
public class HelloWorld{
public static void main(String []args){
char [][] tab= {
{'*', '-', '-', '-', '-','*'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'*', '-', '-', '-', '-','*'}
};
int row=8;
int col=6;
for (int i=0; i< row; i++){
for(int j=0; j< col; j++){
System.out.print(tab[i][j]+" ");
}
System.out.print(tab[5][4]='?');
System.out.println("");
}
这是我的输出:
* - - - - - * ?
+ + ?
+ + ?
+ + ?
+ + ?
+ ? + ?
+ + ?
* - - - - - * ?
感谢您的帮助
首先,这是您的重构代码。如果你像在这里做的那样将一些东西连接到你的矩阵System.out.print(tab[i][j]+" ");
你将不会打印完全相同的矩阵。
第二点,这一行 System.out.print(tab[5][4]='?');
在你的外部 for 循环中,所以这就是你在矩阵外打印它的原因。
调试你的代码,你就会明白发生了什么。重构修复后的版本来了:
public class NewOne {
public static void main(String[] args) {
char[][] tab = { { '*', '-', '-', '-', '-', '*' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '*', '-', '-', '-', '-', '*' }
};
printArray(tab);
// then we change a value
tab[5][4] = '?';
printArray(tab);
}
/**
* this Method Prints any given matrix
*
* @param tab a char matrix
*/
private static void printArray(char[][] tab) {
for (int i = 0; i < tab.length; i++) {
for (int j = 0; j < tab[i].length; j++) {
System.out.print(tab[i][j]);
}
System.out.println();
}
}
}
你可以这样做 -
声明一个大小合适的数组并用 ' ' 填充它:
final int row=8;
final int col=6;
char[][] tab = new char[row][col];
for (int i=0; i< row; i++){
for(int j=0; j< col; j++){
tab[i][j] = ' ';
}
}
将星星放在角落:
tab[0][0] = '*';
tab[0][col-1] = '*';
tab[row-1][0] = '*';
tab[row-1][col-1] = '*';
第一行和最后一行:
for (int i=1; i<col-1; i++) {
tab[0][i] = '-';
tab[row-1][i] = '-';
}
对于所有其他行:
for (int i=1; i < row-1; i++) {
tab[i][0] = '+';
tab[i][col-1] = '+';
}
现在你可以放置'?'在任何你想要的地方打印数组。
我有这段代码可以使用二维数组打印一个矩形。如您所见,我手动编码了整个数组,而不是使用循环。我要找的是:
- 如何使用循环打印完全相同的矩形(带有星号、负号...)
- 创建此模板后,如果我想放置一个字符'?'在矩形内部,例如,我可以调用坐标 tab[5][4],这将打印它。
问题是一整列'?'印在模板外面。我该如何解决这个问题?
注意:我不想使用任何 java 的 Swing 或 AWT 库。
public class HelloWorld{
public static void main(String []args){
char [][] tab= {
{'*', '-', '-', '-', '-','*'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'+', ' ', ' ', ' ', ' ', '+'},
{'*', '-', '-', '-', '-','*'}
};
int row=8;
int col=6;
for (int i=0; i< row; i++){
for(int j=0; j< col; j++){
System.out.print(tab[i][j]+" ");
}
System.out.print(tab[5][4]='?');
System.out.println("");
}
这是我的输出:
* - - - - - * ?
+ + ?
+ + ?
+ + ?
+ + ?
+ ? + ?
+ + ?
* - - - - - * ?
感谢您的帮助
首先,这是您的重构代码。如果你像在这里做的那样将一些东西连接到你的矩阵System.out.print(tab[i][j]+" ");
你将不会打印完全相同的矩阵。
第二点,这一行 System.out.print(tab[5][4]='?');
在你的外部 for 循环中,所以这就是你在矩阵外打印它的原因。
调试你的代码,你就会明白发生了什么。重构修复后的版本来了:
public class NewOne {
public static void main(String[] args) {
char[][] tab = { { '*', '-', '-', '-', '-', '*' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '+', ' ', ' ', ' ', ' ', '+' },
{ '*', '-', '-', '-', '-', '*' }
};
printArray(tab);
// then we change a value
tab[5][4] = '?';
printArray(tab);
}
/**
* this Method Prints any given matrix
*
* @param tab a char matrix
*/
private static void printArray(char[][] tab) {
for (int i = 0; i < tab.length; i++) {
for (int j = 0; j < tab[i].length; j++) {
System.out.print(tab[i][j]);
}
System.out.println();
}
}
}
你可以这样做 - 声明一个大小合适的数组并用 ' ' 填充它:
final int row=8;
final int col=6;
char[][] tab = new char[row][col];
for (int i=0; i< row; i++){
for(int j=0; j< col; j++){
tab[i][j] = ' ';
}
}
将星星放在角落:
tab[0][0] = '*';
tab[0][col-1] = '*';
tab[row-1][0] = '*';
tab[row-1][col-1] = '*';
第一行和最后一行:
for (int i=1; i<col-1; i++) {
tab[0][i] = '-';
tab[row-1][i] = '-';
}
对于所有其他行:
for (int i=1; i < row-1; i++) {
tab[i][0] = '+';
tab[i][col-1] = '+';
}
现在你可以放置'?'在任何你想要的地方打印数组。