核心java打印蝴蝶结构

时间:2014-07-04 05:05:55

标签: java

package mypack;

public class Loop {

public static void main(String[] args) {

    for(int i=0;i<=8;i++){
        for(int j=1;j<=i+1;j++){
            System.out.print(j);
        }
        System.out.println();

    }
    for(int i=8;i>=1;i--){
        for(int j=1;j<=i;j++){
            System.out.print(j);
        }
        System.out.println();

    }

        }

    }

输出:

1
12
123
1234
12345
123456
1234567
12345678
123456789
12345678
1234567
123456
12345
1234
123
12
1

我希望它的镜像在右侧。 有人可以帮我这个。

3 个答案:

答案 0 :(得分:1)

您可以使用number of spaces

在添加数字反射以在控制台中形成蝴蝶效果之前计算String.format

<强>样品:

public static void main(String[] args) {

    int j;
    for (int i = 0; i <= 8; i++) {
        for ( j = 1; j <= i + 1; j++) {
            System.out.print(j);
        }
        System.out.print(String.format("%"+((10 - j)*2 != 0 ? (10 - j)*2 : "")+"s", ""));

        for ( j = i + 1; j >= 1; j--) {
            System.out.print(j);
        }
        System.out.println();

    }
    for (int i = 8; i >= 1; i--) {
        for ( j = 1; j <= i ; j++) {
            System.out.print(j);
        }

        System.out.print(String.format("%"+((10 - j)*2 != 0 ? (10 - j)*2 : "")+"s", ""));

        for ( j = i; j >= 1; j--) {
            System.out.print(j);
        }
        System.out.println();

    }

}

<强>结果:

1                1
12              21
123            321
1234          4321
12345        54321
123456      654321
1234567    7654321
12345678  87654321
123456789987654321
12345678  87654321
1234567    7654321
123456      654321
12345        54321
1234          4321
123            321
12              21
1                1

答案 1 :(得分:1)

一种简单的方法是:

public static void main(String[] args) {
    int limit = 10;
    String left = "%-9s";
    String right = "%9s";
    for (int i = 0; i < limit; i++) {
        StringBuilder b = new StringBuilder();
        for (int j = 1; j < i + 1; j++) {
            b.append(j);
        }
        System.out.println(String.format(left, b.toString())
                + String.format(right, b.reverse().toString()));
    }
    // skipping the redundant line from last syso in above loop
    for (int i = limit - 2; i > 0; i--) {
        StringBuilder b = new StringBuilder();
        for (int j = 1; j < i + 1; j++) {
            b.append(j);
        }
        System.out.println(String.format(left, b.toString())
                + String.format(right, b.reverse().toString()));
    }
}

想法是打印序列(左对齐),然后在每次迭代中打印其反向(右对齐)。

答案 2 :(得分:0)

打包mypack;

public class Loop {

public static void main(String[] args) {

    for(int i=0;i<=6;i++){
        for(int j=1  ;j<=i+1;j++ ){
            System.out.print(j);    
            }
        System.out.print("\t");
        for (int j=0;j<6-i;j++)
            System.out.print(" ");

                             for (int k=1;k<=i+1;k++)
                              System.out.print(k);

        System.out.println();

    }
    for(int i=6;i>=0;i--){
        for(int j=1;j<=i+1;j++){
            System.out.print(j);
        }
        System.out.print("\t");
        for (int j=0;j<6-i;j++)
            System.out.print(" ");

                             for (int k=1;k<=i+1;k++)
                              System.out.print(k);

        System.out.println();

    }

        }

    }

自己拿到它,谢谢大家..