在java中打印文本模式

时间:2015-04-13 13:42:37

标签: 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循环之间,但我无法弄清楚如何做到这一点。它困扰了我一段时间。

6 个答案:

答案 0 :(得分:5)

我给你提示,计算空格:

第1行:1个空格

第2行:3个空格

对于第3行:5个空格

第4行:7个空格

等等,看模式? :)

是的,再多放一个&#34;空间用于循环&#34;在现有的周期之间。


Spoiler ALERT,这是Java解决方案,但没有它就尝试这样做。

这是完全正常工作的代码,它也适用于任何大小的数组:

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

答案 1 :(得分:2)

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();
    }

答案 2 :(得分:2)

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

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数组可以随时增加,输出“相同”(就格式而言)。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

我最初使用新变量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();
}

答案 5 :(得分:0)

请为变量使用专有名称。 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