1

我有这段代码使用二维数组打印一个矩形。如您所见,我手动编码了整个数组,而不是使用循环。我正在寻找的是:

  1. 如何使用循环打印完全相同的矩形(带有星星,减号......)
  2. 创建此模板后,如果我想放置,比如说一个 char '?' 在矩形内,例如,我可以调用坐标 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("");

}

这是我的输出:

* - - - - - * ?
+           + ?
+           + ?
+           + ?
+           + ?
+        ?  + ?
+           + ?
* - - - - - * ?

谢谢你的帮助

4

2 回答 2

1

你可以这样做 - 声明一个大小合适的数组并用''填充它:

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] = '+';
}

现在您可以放置​​“?” 任何你想要的地方并打印数组。

于 2016-10-16T13:53:45.617 回答
0

这是你重构的代码,第一件事。如果您像在这里所做的那样将某些东西连接到您的矩阵,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();
        }
    }
}
于 2016-10-16T13:17:08.140 回答