与循环的星金字塔

时间:2014-08-03 04:36:42

标签: java while-loop

我目前对制作明星金字塔感到困惑。 我的产品需要能够使用用户输入的行数创建金字塔。所以,如果我说3,金字塔看起来像:

  *
 ***
*****

当我输入3时,我的金字塔(基于我下面的代码)看起来像:

   *
   ***
   *****

我在连续排队时难以扣除空格。我似乎准确地准备了其他部分,所以我的问题是,如何在初始空格量之后将每个后续行的空格减去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;    
       }
    }
}

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

1 个答案:

答案 0 :(得分:0)

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

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

对于外循环的每次迭代,您的spacesPerRow应该递减一次。一个理想的地方就在你的第一个内循环结束后。


致版主&amp;问下来选民:

我无法添加评论,所以我会在这里添加我的想法。问题的前几行准确地提到了问题:&#34;我想做X,但我的代码正在做Y&#34;。 OP无法弄清楚原因。

我也相信代码也不包含许多不必要的部分。

我想知道为什么这被认为是偏离主题,被搁置,并且有两次低票。