用用户输入和Java中的空格编码此金字塔模式?

时间:2018-10-08 15:55:07

标签: java loops for-loop nested-loops

我是编码的新手,我的老师在解释事物方面很糟糕。我不知道这堂课是怎么回事,我真的需要这方面的帮助! 我以前做过很多金字塔图案,但这是我不知道的一种。

我也知道如何获得用户输入,但是我只需要帮助了解为什么这行不通。他向我们简要说明了如何编写此问题的代码,但是无论我进行多少次尝试尝试,它都无法正常工作。

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

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

因此,第一行上的空格数为4,第二行上的空格数为3,依此类推,直到达到零为止。

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

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++;
} 

请帮助!我真傻

6 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

它非常接近,大多数for循环是错误的。

for(initialization;condition;increment)

for循环仅在条件为true时执行。在您的情况下,条件真的没有意义。尝试更改它。你的柜台和我也是同一件事:)

答案 2 :(得分:0)

这基本上是正确的,但是您是从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++;
}

答案 3 :(得分:0)

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

这只是一个保存循环的变体...

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();
}

答案 4 :(得分:0)

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

    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("\0", toBeRepeated);
}

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

答案 5 :(得分:0)

我做了类似的工作,这就是我所做的,您可以尝试一下。它需要用户输入并显示空格和“#” ...

    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();
   }

输出为:

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