Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中用用户输入和空格编码这个金字塔模式?_Java_Loops_For Loop_Nested Loops - Fatal编程技术网

在Java中用用户输入和空格编码这个金字塔模式?

在Java中用用户输入和空格编码这个金字塔模式?,java,loops,for-loop,nested-loops,Java,Loops,For Loop,Nested Loops,我对编码完全不熟悉,我的老师在解释方面很糟糕。我不知道课堂上发生了什么,我真的需要帮助! 我以前做过很多金字塔图案,但这个我不知道 我也知道如何获得用户输入,但我只需要帮助理解为什么这不起作用。他简要地向我们解释了如何编写这个问题的代码,但无论我更改并尝试了多少次,它都不起作用 我必须使用用户输入的行数创建一个金字塔。因此,如果用户输入了5,它应该是这样的: * ** *** **** ***** 所以第一行的空格数是四,第二行有三个空格,依此类推,直到0 这是给出完全不准

我对编码完全不熟悉,我的老师在解释方面很糟糕。我不知道课堂上发生了什么,我真的需要帮助! 我以前做过很多金字塔图案,但这个我不知道

我也知道如何获得用户输入,但我只需要帮助理解为什么这不起作用。他简要地向我们解释了如何编写这个问题的代码,但无论我更改并尝试了多少次,它都不起作用

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

    *
   **
  ***
 ****
*****
所以第一行的空格数是四,第二行有三个空格,依此类推,直到0

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

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循环仅在条件为true时执行。在你的情况下,这些条件真的没有意义。试着改变它。你的计数器和我也是一样的:

基本上是正确的,但是你从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("\0", "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("\0", toBeRepeated);
}

正如其他地方提到的,循环变量(如i)通常从0开始,因为这样的变量可以用作数组/列表索引。但是,在这种情况下,没有相关的数组或列表,因此将sarting设置为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();
   }

非常感谢。我不敢相信这件事竟如此微不足道。你帮了我大忙,我无缘无故地紧张。
     #
    ##
   ###
  ####
 #####
######