使用 Java 中的用户输入和空格对这个金字塔模式进行编码?

Coding this pyramid pattern with user input and spaces in Java?

我对编码完全陌生,我的老师不善于解释事情。我不知道 class 中发生了什么,我真的需要帮助! 我以前做过很多金字塔图案,但这是我想不出来的。

我也知道如何获取用户输入,但我需要帮助来理解为什么这不起作用。他简单的给我们解释了这个问题怎么编码,但是我改了试了多少次都不行。

我必须使用用户输入的行数创建一个金字塔。所以如果用户输入 5,它应该是这样的:

    *
   **
  ***
 ****
*****

所以第一行的空格数是四个,第二行是三个空格,依此类推,直到变成零。

这是代码(给出了完全不准确的输出):

System.out.print("\f");
System.out.println("Enter a valid number between 1 and 20."); 
int num = 0;
int counter = 1;
num = keyNum.nextInt();
for (int i = 1; i == num; i++)
{
    for (int j = 1; j == (num -= counter); j++)
    { 
        System.out.print(" ");
    }
    for (int k = 1; k == counter; k++)
    { 
        System.out.print("*");
    }
    System.out.println("");
    counter++;
} 

请帮忙!我觉得很愚蠢。

非常接近,主要是 for 循环是错误的。

for(initialization;condition;increment)

for循环只在条件为真时执行。在您的情况下,条件并没有真正意义。尝试改变它。你的柜台和我也是一样的:)

大部分是正确的,但是你从 1 开始循环,但它们实际上应该从 0 开始,并且 for 循环中的条件不应该有 == 这使得它 运行一次。

for (int i = 0; i < num; i++) {
    for (int j = 0; j <= (num - counter); j++) {
        System.out.print(" ");
    }

    for (int k = 0; k < counter; k++) {
        System.out.print("*");
    }

    System.out.println("");

    counter++;
}

我怀疑你的老师会接受这个。但它只是一个有趣的班轮

int num = 20;
IntStream.range(0, num).forEach(i -> System.out.println(String.format("%" + num + "s", new String(new char[i+1]).replace("[=10=]", "x"))));

有趣的编码练习。无论如何,正如其他人指出的那样,您几乎是正确的。 解决问题的方法有一百种。

这里只是一个省去了循环的变体...

int lines=5;

for (int i=0; i<lines; i++) {
    for (int k=0; k<lines; k++) {
        System.out.print( (k < lines - i - 1) ? " " : "*");
    }
    System.out.println();
}

另一种使用单个(显式)循环的解决方案:

    for (int i = 1; i <= num; i++) {
        int expectedSpaces = num - i;
        String spaces = repeat(" ", expectedSpaces);
        String asterisks = repeat("*", i);
        System.out.println(spaces + asterisks);
    }
}

private static final String repeat(String toBeRepeated, int length) {
    return new String(new char[length]).replace("[=10=]", toBeRepeated);
}

如其他地方所述,循环变量如 i 通常从 0 开始,因为此类变量可用作 array/List 索引。但是,在这种情况下,没有相关的数组或列表,因此从 1 开始可以简化逻辑。

我做过类似的东西,这就是我做的,你可以试一试。它接受用户输入并显示空格和“#”...

    int size = n;

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

输出将是:

     #
    ##
   ###
  ####
 #####
######