在Java中,如何使用嵌套的for循环来编码星号金字塔?

时间:2020-05-29 21:49:29

标签: java loops nested-loops

我正在做一个作业,其中我必须使用嵌套循环来编程位于其侧面的星号金字塔。 该程序的输出应如下所示:

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

当我运行程序时,它仅显示代码的最后四行。我不知道为什么前三个没有出现。 这是我的代码:

public class Main
{
    public static void main(String[] args) {

        for(int a = 0; a < 8; a++) //1
        {
            if(a < 4){
                for(int b = a; b < 4; b++)
                {
                    System.out.print("*");
                }

            }
            if(a >= 4)
                for(int c = a; c < 4; c++)
                {  
                    System.out.print("*");
                }

            System.out.println();
        } //loop 1

    }
}

这是我的输出:

****
***
**
*

(输出之后有一些空白,我没有包含。这是由外部for循环迭代八次引起的。)如何使程序正确显示所有代码,而不仅仅是最后四个?线?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的逻辑中有几个错误:

  1. 由于您只需要7个rows,因此第一个循环应迭代到a < 7
  2. 在前3行中,您的nested loop应该从0迭代到a
  3. 此后,另一个nested loop应该从a7
  4. 最好使用if-else而不是两个if语句

这是我测试过的完整解决方案:

for(int a = 0; a < 7; a++) {
     if(a < 4){
          for(int b = 0; b <= a; b++)
               System.out.print("*");
     }else {
          for(int c = a; c < 7; c++)
               System.out.print("*");
     }
     System.out.println();
}

输出:

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

编辑:

如评论中所述,您还可以将外循环分为两部分,以删除条件,如下所示:

for(int a = 0; a < 4; a++) {
     for(int b = 0; b <= a; b++)
          System.out.print("*");
     System.out.println();
}
for(int a = 4; a <= 7; a++) {
     for(int b = a; b < 7; b++)
          System.out.print("*");
     System.out.println();
}

答案 1 :(得分:0)

您已经关闭。尝试这样的事情:

int size = 4;

for(int line = 1; line < size * 2; line++) {
  if(line <= size) {
    for(int i = 0; i < line; i++) {
      System.out.print("*");
    }
  }
  else {
    for(int i = 0; i < size * 2 - line; i++) {
      System.out.print("*");
    }
  }
  System.out.println();
}