程序显示模式?

时间:2014-03-26 16:50:22

标签: java

我想生成这样的模式

                 1234554321
                 1234  4321
                 123    321
                 12      21
                 1        1
                 12      21
                 123    321
                 1234  4321
                 1234554321

使用此代码

public class Pattren {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int i,j,n;
    n=Integer.parseInt(args[0]);
    for(i=0;i<n;i++)
    {
        System.out.println();
        for(j=1;j<=n-i;j++)
            System.out.print(j);
        for(j=0;j<2*i;j++)
            System.out.print(" ");
        for(j=n-i;j>0;j--)
            System.out.print(j);
    }
    for(i=2;i<=n;i++)
    {
        System.out.println();
        for(j=1;j<=i;j++)
            System.out.print(j);
        for(j=i;j>0;j--)
            System.out.print(j);
    }
    }

}

这就是我得到的:

  1234554321
  1234  4321
  123    321
  12      21
  1        1
  1221
  123321
  12344321
  1234554321

你能帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

您忘记在底部打印空格。您可以使用:

for (j = 2 * (n - i); j > 0; j--) {
    System.out.print(" ");
}

<强>输出继电器:

1234554321
1234  4321
123    321
12      21
1        1
1        1
12      21
123    321
1234  4321
1234554321

答案 1 :(得分:0)

public static void main(String[] args) {
    printPattern(5);
}
public static void printPattern(int count) {
    for (int i = 0; i < count; ++i) {
        printLine(count, i);
    }
    for (int i = count - 1; i >= 0; --i) {
        printLine(count, i);
    }
}
private static void printLine(int count, int missing) {
    for (int i = 1; i <= count; ++i) {
        boolean isMissing = i > count - missing;
        System.out.print(isMissing ? " " : String.valueOf(i));
    }
    for (int i = count; i > 0; --i) {
        boolean isMissing = i > count - missing;
        System.out.print(isMissing ? " " : String.valueOf(i));
    }
    System.out.println();
}

printPattern(9)=

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

答案 2 :(得分:0)

我试图在C#中的一个声明中这样做只是为了好玩。分享每个人的娱乐。

Console.WriteLine(
    string.Join(Environment.NewLine,
          Enumerable.Range(0, 11).Select(x => Math.Abs(5 - x)).Select(i =>
               string.Join("", Enumerable.Range(1, i).Select(x => x.ToString())) +
               new string(' ', (5 - i) * 2) +
               string.Join("", Enumerable.Range(1, i).Select(x => (i - x + 1).ToString()))
                        ).Where(s => s.Trim().Length > 0)));

我实际上想在java中发布它,但不知道Java中是否有一些等效的LINQ。 C#语法非常接近,如果可以找到Enumerable.Range()或等效语句,则可以在没有任何更改的情况下工作。

答案 3 :(得分:0)

您没有为下半部分打印空格。下面的代码工作正常:

public class Pattren {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int i,j,n;
    n=Integer.parseInt(args[0]);
    for(i=0;i<n;i++)
    {
        System.out.println();
        for(j=1;j<=n-i;j++)
            System.out.print(j);
        for(j=0;j<2*i;j++)
            System.out.print(" ");
        for(j=n-i;j>0;j--)
            System.out.print(j);
    }
    for(i=2;i<=n;i++)
    {
        System.out.println();
        for(j=1;j<=i;j++)
            System.out.print(j);
        for (j = 2*(n - i); j > 0; j--)
            System.out.print(" ");
        for(j=i;j>0;j--)
            System.out.print(j);
    }
    }

}