Java 带while环的星形金字塔

Java 带while环的星形金字塔,java,while-loop,Java,While Loop,我现在对制作一个星形金字塔感到困惑。 我的产品需要能够创建一个金字塔与用户输入的行。如果我说3,金字塔看起来像: * *** ***** 当我输入3时,基于下面代码的金字塔如下所示: * *** ***** import java.util.Scanner; public class AstPyramid{ public static void main(String[] args){ Scanner keyboard = new Scanner

我现在对制作一个星形金字塔感到困惑。 我的产品需要能够创建一个金字塔与用户输入的行。如果我说3,金字塔看起来像:

  *
 ***
*****
当我输入3时,基于下面代码的金字塔如下所示:

   *
   ***
   *****
import java.util.Scanner;
public class AstPyramid{
    public static void main(String[] args){
       Scanner keyboard = new Scanner(System.in);

       System.out.println("How tall do you want your pyramid to be? Rows: ");
       int rowCounter = keyboard.nextInt();     
       int baseLength = 1;
       int starsInRow = 1;

       while (baseLength <= rowCounter){
         int starCounter = 1;
         int whiteSpace = rowCounter/2; 

         while (whiteSpace >= 0){
            System.out.print(" ");
            whiteSpace--;
         }         

         while (starCounter <= starsInRow){
            System.out.print("*");
            starCounter++;
         }

            System.out.println();
            baseLength++;
            starsInRow=starsInRow+2;    
       }
    }
}
我很难在下排时扣除空格。我似乎准确地记下了其他部分,所以我的问题是,如何在初始空格数之后,将下面每行的空格减去1?我可以得到关于如何修复代码的帮助吗?当使用while循环时。如果我的代码中的任何其他部分看起来不准确,请随意评论

目前,我的代码是这样的:

   *
   ***
   *****
import java.util.Scanner;
public class AstPyramid{
    public static void main(String[] args){
       Scanner keyboard = new Scanner(System.in);

       System.out.println("How tall do you want your pyramid to be? Rows: ");
       int rowCounter = keyboard.nextInt();     
       int baseLength = 1;
       int starsInRow = 1;

       while (baseLength <= rowCounter){
         int starCounter = 1;
         int whiteSpace = rowCounter/2; 

         while (whiteSpace >= 0){
            System.out.print(" ");
            whiteSpace--;
         }         

         while (starCounter <= starsInRow){
            System.out.print("*");
            starCounter++;
         }

            System.out.println();
            baseLength++;
            starsInRow=starsInRow+2;    
       }
    }
}

更新:我更新了很多次这个问题,并且已经收到了与之相关的答案。这个问题现在可以不提了吗?我不确定编辑此帖子是否会通知任何人,但值得再试一次。

在您的代码中,用于打印空白的第一个内部循环始终运行rowCounter/2次。这就是问题所在。理想情况下,它应该从该值开始,并在外循环的每次迭代中保持递减

您可以使用一个spacesPerRow变量,并在外部循环之外为其指定一个初始值rowCounter/2。然后,在每个外部循环迭代中,可以减少它。并在第一个内部循环中使用此空格箭头打印空格

对于外部循环的每次迭代,您的空格箭头应该减少一次。一个理想的地方是在你的第一个内环完成后

主持人和提问选民:

我不能添加评论,所以我将在这里添加我的想法。问题的前几行正好提到了这个问题:我想做X,但我的代码在做Y。OP无法找出原因

我还相信代码也没有包含很多不必要的部分


我想知道为什么这被认为是离题,搁置,并有两张反对票。

请原谅,但我不明白这是怎么离题的。@ShashwatBlack也不确定,但我编辑了我的主题帖子,并将主要问题用粗体字表示。也试图让它更简洁。现在我只是听从Textant的建议。所以感谢有人在这个问题被搁置之前回答了。我能够为spaceCounter设置一个初始值,它应该如何工作,但现在我只是想知道如何在每次迭代中将spaceCounter减1。我的问题是:我应该把太空计数器放在哪里;?我认为它会像我的原始代码一样出现在第一个while语句中,尽管这似乎并没有减少任何内容。还是问题可能出在while语句本身?我理解为什么spaceCounter-;将使用while语句进入内部循环,因为这将限制空格的循环次数,尽管仍有一些错误。我完全更新了我的第一篇文章,所以我希望你有时间再看一看。感谢您到目前为止的建议,尽管此问题仍处于搁置状态。此URL有您的代码的修改版本:-我添加了一些注释,解释我们在那里做什么以及它为什么工作。此外,请将您的问题还原为原始源代码,否则其他人可能无法了解我们在这里讨论的内容。