我正在 Java 类中编写一个程序,我需要打印一个星星金字塔。我的代码如下:
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number between 1 and 20: ");
int value = sc.nextInt();
System.out.println("Pattern B: ");
for(int x = 1; x <= value; x++){
for(int y = value; y>=x; y-- ){
System.out.print("*");
}
System.out.print("\n");
}
我的结果打印一行 5 颗星,然后是 4、3、2、1(如果用户输入数字 5)。 我想要的是将星星全部推到右边。如:
一行5星, (空格)4 颗星线, (两个空格)三颗星线, (三个空格)2 颗星线, (四个空格)一星线
我说得有道理吗?
我是否应该引入一个 if then 语句,检查变量 y 并相应地增加空格?如果我让您感到困惑,我很抱歉。
您可以执行以下两项操作之一:
for
x
循环中引入另一个 for
循环,该循环将循环 x
次,直至 print
x
空格字符,或者y
for
循环以从 1
运行到 value
,然后在其中添加 if
语句来决定是否打印空格或 *
。您可以引入一个新的
for
循环来在打印星星之前打印所需数量的空白:
Scanner sc = new Scanner(System.in);
System.out.print("Enter a number between 1 and 20: ");
int value = sc.nextInt();
System.out.println("Pattern B: ");
for(int x = 1; x <= value; x++){
for(int c = value-x; c<value; c++){
System.out.print(" ");
}
for(int y = value; y>=x; y-- ){
System.out.print("*");
}
System.out.print("\n");
}
请记住,如果你想要一个真正的金字塔,你必须跳过每 2 个数字。例如,如果您选择 5,并决定为每个数字打印一行,直到 0,这是您可以做的最好的事情:
*****
****
***
**
*
如果你跳过你可以得到这样的东西:
*****
***
*
现在您所需要的就是查看距基地有多远即可获得空格数,将其除以 2 即可得到前一个和后一个空格。
你可以尝试这样的事情:
int spacing;
for(int x = 0; x < value; x=x+2){
for(int y = value; y>x; y-- ){
spacing = x/2;
for(int i = 0; i < spacing; ++i)
System.out.print(" ");
System.out.print("*");
for(int i = 0; i < spacing; ++i)
System.out.print(" ");
}
System.out.print("\n");
}
代码::::
公共类 TestExample3 {
public static void main(String[] args) {
int number = 9, n = 0 , n1 = 0 , n2 = number ;
for(int i=1;i<=number;i++) {
if(i<=(number/2)) {
for(int k=(number/2);k>n1;k--) {
System.out.print(" ");
}n1++;
for(int j=1;j<=(2*i-1);j++) {
System.out.print("*");
}
}else{
for(int k=n2;k<number;k++) {
System.out.print(" ");
} n2--;
for(int p = number-2;p>=(2*n-1);p--) {
System.out.print("*");
}
n++;
}
System.out.println();
}
}
}
输出::::::
*
*