打印带有二维数组的空心矩形

时间:2016-10-16 13:08:03

标签: java arrays coordinates dimensional

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

  1. 如何使用循环打印完全相同的矩形(带星号,缩写......)
  2. 创建此模板后,如果我要放置,请说一个字母'?'例如,在矩形内部,我可以调用坐标选项卡[5] [4],这将打印出来。
  3. 问题是整列“?”打印在模板外面。我该如何解决这个问题?

    注意:我不想使用任何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("");
    
    }
    

    这是我的输出:

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

    感谢您的帮助

2 个答案:

答案 0 :(得分: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] = '+';
}

现在你可以放置'?'随时随地打印数组。

答案 1 :(得分: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();
        }
    }
}