我想绘制一个金字塔,其数字从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#)
答案 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
个空格。