【问题标题】:Loop error when printing "triangle" of stars打印星星的“三角形”时出现循环错误
【发布时间】:2015-02-04 01:11:04
【问题描述】:

我正在尝试使用嵌套循环打印下面的图片(我应该使用 for & while 循环):

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

以 5 个空格开头,每行减 2。 以 2 星开始,每行增加 2。 以 4 行结束。

我的代码在第一行有效,但它不会在其余 3 行上打印星号。有人可以看到错误可能是什么吗?请不要给出答案,我只是需要帮助理解逻辑错误!

    int m = 6;
    int n = 0;

    for(int l = 1; l < 5; l++){

        while(m > 0){
            System.out.print(" ");
             m--;
        }
        while(n < (2*l)){
            System.out.print("*");
            n++;
        }
        System.out.println();
        m = 5 - (2*l);
        n = n + 2;
    }  

【问题讨论】:

标签: java loops


【解决方案1】:

错误是您没有在每个循环中重置n 变量。在第一个循环之后添加 2,此时 is 已经大于 2 * l,因此不会再打印星星。

将其结构如下更明智:

for (int l = 0; l < 4; l ++) {
    for (int i = 0; i < 5 - 2l; i++) 
        System.out.print(" ");
    for (int i = 0; i < 2 + 2l; i++)
        System.out.print("*");
    System.out.println();
}

【讨论】:

    【解决方案2】:

    提示: 看 m=5 - (2×l);

    只要 l=3 结果将是否定的并且第一个while循环不会被执行

    【讨论】:

      【解决方案3】:

      就像你给n加2一样,你必须从m中删除2。如果我理解得很好,m 是你的空格数,n 是你的星数,所以如果你加两星; n+2 那么您也必须删除该空间:m - 2 因为添加的两个星星占据了该空间。

      m = m - 2;
      n = n + 2;
      

      编辑:您还必须更改编辑 n 的 while 循环,以免更改 n:

      int temp = n; 
      
      while(temp > (2*l)){
          System.out.print("*");
                  temp++;
      }
      

      【讨论】:

        【解决方案4】:

        使用嵌套的 for 循环,外循环沿行向下移动,内循环沿列移动。每次通过内部循环都应检查 ro 是否放置了空格或星号。这可以通过 if 语句使用 for 循环中的整数变量来确定何时放置空格或星号来完成。此算法将根据您想要的形状而有所不同。

        或者,在这里使用双索引数组可能会很有趣。更复杂,但如果您需要使用 while 循环,可能需要查看一些东西。可以使用 for 循环用“”或“*”填充双索引 char 数组,然后简单地打印出数组的内容,同时在打印后将值设置为 null,并检查数组是否是否为空。

        也许其中一些有用。编码愉快。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-08
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 2016-07-17
          • 2022-01-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多