如何画金字塔

时间:2013-12-03 16:30:10

标签: java

我想绘制一个金字塔,其数字从1到用户输入的数字。我目前正在尝试

static Scanner s=new Scanner(System.in);
static ArrayList<Integer> by;

public static void main (String[] args){
    by=new ArrayList<>();
    System.out.println("Enter Number : ");
    int no=s.nextInt();
    while (no > 9 || no==0){
        System.out.println("Value cannot be equal to 0 or greater than 9 \nEnter another number");
        no=s.nextInt();
    }
    System.out.println();

    for (int a=1;a<=no;a++){
        if (a==1){}else{
        by.add(a-1);}
        Collections.sort(by);
        for (int o:by){
        System.out.print(o+" ");
        }
        System.out.print(a);
        System.out.println();
    }
}

但我目前仍然坚持如何让数字形成金字塔。我将不胜感激任何帮助。这是一个金字塔的例子(我使用了c#)

enter image description here

3 个答案:

答案 0 :(得分:0)

for-each循环

之前添加此代码
        for(int i=no-a;i>=0;--i){
            System.out.print(" ");
        }

答案 1 :(得分:0)

我从未见过如此复杂的解决方案。您已经使用了arraylist,Collections类以及每个循环。如果您正在寻找一个更简单的解决方案:

假设没有输入的号码:

for(int i=1;i<=no;i++){
    for(int k=no;k>=i;k--){ System.out.print(' ');}
    for(int j=1;j<=i;j++){ System.out.print('%d '),j;}
    System.out.println();
}

答案 2 :(得分:0)

请注意,用户选择了3,因此您的结果看起来像

1
1 2
1 2 3

虽然它应该

  1
 1 2
1 2 3

所以你需要将每一行向右移动

__1   //move two characters to right
_1 2  //move one character to right
1 2 3 //dont move

一般的想法是将行no - a字符移到右边。要做到这一点,只需添加

System.out.print(new String(new char[no - a]).replace('\0', ' '));

在循环开始时在每行之前打印no-a个空格。