繁体   English   中英

在Java中打印文本模式

[英]Print a text pattern in java

我需要以表格形式打印图案

   ABCDEF FEDCBA
   ABCDE   EDCBA
   ABCD     DCBA
   ABC       CBA
   AB         BA
   A           A

下面是我的代码:

   public static void main(String args[])
{
    char[] c = {'A','B','C','D','E','F','G'};
    int i, j;

    for(j = 5; j >= 0; j--)
    {
        for(int k = 0; k <= j; k++)
        {
            System.out.print(c[k]);
        }
        for(i = j; i >= 0; i--)
        {
            System.out.print(c[i]);
        }

        System.out.println();
    }
}

这给我的输出为

   ABCDEFFEDCBA
   ABCDEEDCBA
   ABCDDCBA
   ABCCBA
   ABBA
   AA

达到此输出相当容易。 但是,我无法提供空间。 我知道产生空间的循环会出现在两个for循环之间,但是我不知道该怎么做。 它困扰了我一段时间。

我给你提示,算一下空格:

对于第1行:1个空格

对于第2行:3个空格

第3行:5个空格

对于第4行:7个空格

等,看到模式? :)

是的,在现有循环之间再增加一个“循环空间”。


Spoiler ALERT,这是Java解决方案,但是请尝试在没有它的情况下进行操作。

这是完全有效的代码,它也适用于任何大小的array:

public static void main(String args[]) {
    char[] c = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'Y', 'Z'};
    int i, j;

    for (j = c.length-1; j >= 0; j--) {
        for (int k = 0; k <= j; k++) {
            System.out.print(c[k]);
        }
        for (int k = 0; k < (c.length-j)*2 - 1; k++) {
            System.out.print(" ");
        }
        for (i = j; i >= 0; i--) {
            System.out.print(c[i]);
        }

        System.out.println();
    }
}

样本输出:

ABCDEFGYZ ZYGFEDCBA
ABCDEFGY   YGFEDCBA
ABCDEFG     GFEDCBA
ABCDEF       FEDCBA
ABCDE         EDCBA
ABCD           DCBA
ABC             CBA
AB               BA
A                 A
char[] c = {'A','B','C','D','E','F','G'};
    int i, j,n,p=1;

    for(j = 5; j >= 0; j--)
    {
        for(int k = 0; k <= j; k++)
        {
            System.out.print(c[k]);
        }
        for(n = 1; n <= p; n++)
        System.out.print(" ");
        p+=2;
        for(i = j; i >= 0; i--)
        {
            System.out.print(c[i]);
        }

        System.out.println();
    }

即使有(已经)已经解决的一些解决方案,太多的循环也会增加复杂性:

char[] c = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };

for (int i = 0; i < c.length; i++) {
  String tmp = String.valueOf(c).substring(0, c.length - i);

  System.out.printf("%s %" + (c.length + i) + "s%n", tmp, new StringBuilder(tmp).reverse());
}


输出值

ABCDEFG GFEDCBA
ABCDEF   FEDCBA
ABCDE     EDCBA
ABCD       DCBA
ABC         CBA
AB           BA
A             A

您的char数组可以随时增加,输出将是“相同的”(就格式而言)。

模式的每一行都是固定宽度:13个字符。 这意味着,如果您打印j字符(外循环的索引),则需要打印13-2*j空格。

for (int k=0; k<13-2*j; k++){
    System.out.print(" ");
}

在这里,我使用一个新的变量max来初始设置j 此变量用于空间的len计算。

char[] c = {'A','B','C','D','E','F','G'};
int i, j;

int max = 5; //your max output (could be 6)
for(j = max; j >= 0; j--)
{
    for(int k = 0; k <= j; k++)
    {
        System.out.print(c[k]);
    }
    int len = max*2+1; //length calculation
    for(int x = 0; x < len-2*j; x++){ //space loop
        System.out.print(" ");
    }
    for(i = j; i >= 0; i--)
    {
        System.out.print(c[i]);
    }

    System.out.println();
}

请为变量使用专有名称。 Java不是Basic,因此您可以根据需要在变量名中最多使用65,535个字符。

通过代码进行文档编制可以帮助将来必须维护代码的人员。

public class PrintChars {
  public static void main(String args[]) {
    char[] chars = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
    int length = chars.length;

    for (int row = length; row > 0; row--) {
      for (int left = 0; left < row; left++) {
        System.out.print(chars[left]);
      }
      for (int space = 0; space < (length-row)*2+1; space++) {
        System.out.print(' ');
      }
      for (int right = row-1; right >= 0; right--) {
        System.out.print(chars[right]);
      }
      System.out.println();
    }
  }
}

输出:

ABCDEFGH HGFEDCBA
ABCDEFG   GFEDCBA
ABCDEF     FEDCBA
ABCDE       EDCBA
ABCD         DCBA
ABC           CBA
AB             BA
A               A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM