【问题标题】:Java for loop making asterisk matrixJava for循环制作星号矩阵
【发布时间】:2016-07-04 13:35:35
【问题描述】:

我目前正在尝试使用 Java 中的 for 循环制作此表单:

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

我的代码如下所示:

        for (int row = 1; row <= 10; row++) {
        for (int star = 10; star >= 1; star--) {
            if (star >= row) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }
        System.out.println();
    }

输出如下:

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

我似乎无法弄清楚让空白在星星之前。我试过切换循环条件,但它只是给了我相同的结果。 这些for循环有些东西我没有得到。有人能指出我正确的方向吗:)

【问题讨论】:

  • 试试if (star &lt; row) {
  • 提示:这样的东西非常适合使用调试器。甚至更好:您可以在纸上运行它们。只需拿起笔,手动执行您的代码。我敢肯定,在您解决问题之前,您不会花费超过 5 分钟的时间。
  • 名字里有什么? for int column P= 1 而不是 star = 10 会更令人难以置信。

标签: java for-loop matrix nested asterisk


【解决方案1】:

所以我试图分析你的代码,我发现是

你的错误:

在这里,我们看到所需的输出和您的输出与输出行号 2 不同,我发现的原因是 if 条件为 star &gt;= row,因此让我们为 row 值 @ 迭代星形循环987654324@:

if(star >= row) //when star = 10 - condition true. * will be the output

if(star >= row) //when star = 9 - condition true. * will be the output

if(star >= row) //when star = 8 - condition true. * will be the output

所以* 将是输出,直到star&gt;=row 返回false,这将是此迭代的star = 1 场景。
同样对于row = 3,除非star 值变为&lt;=2,否则条件将为真。所以问题是您在开始时打印*,而 的条件出现在打印* 之后。

可能的解决方案:

基本上你需要在开头打印,而不是最后。因此,在相同条件下,您可能需要反转列的迭代方法以反转打印顺序。如果您更改循环的顺序,您就可以完成这项工作。让我们为2row 值迭代循环:

if(star >= row) //when star = 1 - condition false. ` ` will be the output

if(star >= row) //when star = 2 - condition true. * will be the output

if(star >= row) //when star = 8 - condition true. * will be the output

所以在这种情况下, 将首先打印,* 将稍后打印。

更新代码:

我已更新您的代码。看看inner for loop

for (int row = 1; row <= 10; row++)
{
    for (int star = 1; star <= 10; star++)
    {
        if (star >= row)
        {
            System.out.print("*");
        }
        else
        {
            System.out.print(" ");
        }
    }
    System.out.println();
}

希望这会有所帮助:)

【讨论】:

    【解决方案2】:

    将内部循环更改为标准的 1 到 10 循环。

      for (int row = 1; row <= 10; row++) {
        for (int star = 1; star <= 10; star++) {
            if (star >= row) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }
        }
        System.out.println();
    }
    

    【讨论】:

      【解决方案3】:

      第一项工作是远离键盘并思考问题。原来星的条件是“当前行>=当前列”。

      使用来实现

      for (int row = 1; row <= 10; ++row){
          for (int col = 1; col <= 10; ++col){
              System.out.print( row >= col ? "*" : " ");
          }
          System.out.println();
      }
      

      【讨论】:

        【解决方案4】:

        试试这个

        int size = 10;
        for (int row = 0; row < size; row++)
        {
            for (int i = 0; i < row; i++)
            {
                System.out.print(" ");
            }
        
            for (int i = size - row; i > 0; i--)
            {
                System.out.print("*");
            }
        
            System.out.println();
        }
        

        【讨论】:

          【解决方案5】:
           for(int i = 0 ; i < 10 ; i++){
          
                   for(int j = 0 ; j < 10  ; j++){
          
                       if(j >= i){
                          System.out.print("*"); 
                       }else{
                           System.out.print(" ");
                       }
                   }
                      System.out.println("");
          
               }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-01-02
            • 2016-08-21
            • 1970-01-01
            • 2013-12-31
            • 1970-01-01
            • 1970-01-01
            • 2015-10-16
            相关资源
            最近更新 更多