2016-07-08 158 views
1

我对编程相对比较陌生,目前我正试图与C#握手。我已经达到了我正在学习'for'循环的点。我遇到的问题是仅使用'for'循环和字符'*'仅创建一次形状。'For'循环被跳过?

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

我写的代码如下:

 for (int row = 0; row < 5; row++) 
     { 
      for (int column = 0; column + row < 4; column++) 
      { 
       Console.Write(" "); 
      } 

      for (int column = 0; column + row >= 4; column++) 
      { 
       if (column - row >= 5) 
        break; 
       Console.Write("*"); 
      } 
      Console.WriteLine(); 
     } 

从我所看到的,第二嵌套“for”循环被跳过,直至第一循环完成。

更换与“O”的空间,这将显示如下:

OOOO 
OOO 
OO 
O 
********* 
********** 
*********** 
************ 
************* 
************** 

任何人都可以看到我要去哪里错了吗?

+0

你在你的第二个循环的逻辑是不健全的;你只是简单地写道它不会做任何事情,例如'column + row> = 4'所以对于第二个循环中的前4行,它不会执行。 – jacob

+3

我建议你学习如何使用调试器..也做一些''for循环读''一些复习' – MethodMan

+0

把你的答案作为一个实际的网站答案,而不是把它放在你的问题。 – zero298

回答

1

的问题是在第二个嵌套循环,column + row >= 4循环条件。由于列从零开始,所以第一次执行基本上与row >= 4相同,因此对于任何一行< 5它都不会打印,这正是第一次循环的条件。这意味着所有的空间都被打印出来,然后是一堆星星。

你也不需要if语句,因为这基本上是第二个循环条件。像for (int column = 0; column <= row * 2; column++)这样的东西最有意义。

您也应该重新评估外层循环,因为您只需要5行,并且您将按原样浏览10行。

for (int row = 0; row < 5; row++) 
    { 
     for (int column = 0; column + row < 4; column++) 
     { 
      Console.Write(" "); 
     } 

     for (int column = 0; column <= row * 2; column++) 
     { 
      Console.Write("*"); 
     } 
     Console.WriteLine(); 
    } 
+0

谢谢,我完全错过了这样一个事实,即第二次循环从未满足条件。终于有了解决办法。 – Condooo

-1

一个简单的逻辑可以是这样的。

for(i=0 to 4) //since five rows 
    for(j=0 to 2*i-1) // is in multiple of 1, 3, 5 
     print(*) 
0
for (int row = 0; row < 10; row++) 
{ 
    // This code will only get run for the first 3 rows 
    for (int column = 0; column + row < 4; column++) 
    { 
     Console.Write(" "); 
    } 

    // This code will only get run for rows 4 and greater 
    for (int column = 0; column + row >= 4; column++) 
    { 
     if (column - row >= 5) 
      break; 
     Console.Write("*"); 
    } 
    Console.WriteLine(); 
} 

你需要做的是确保你是把空格再加上正确的数量*每行的正确的号码。

提示:你可能只需要5行不是10

+0

>。<刚才注意到我放了多少行。 – Condooo

0

这工作:

for (int row = 0; row < 5; row++) 
{ 
    for (int column = 0; column < 5 + row + 1; column++) 
     Console.Write(column < 5 - row ? " " : "*"); 
    Console.WriteLine(); 
} 
 
    * 
    *** 
    ***** 
    ******* 
********* 
0

研究出了解决办法:

 for (int row = 0; row < 5; row++) 
     { 
      for (int column = 0; column + row < 4; column++) 
      { 
       Console.Write(" "); 
      } 

      for (int column = 0; column + row >= 0; column++) 
      { 
       if (column == (row * 2) + 1) 
        break; 
       Console.Write("*"); 
      } 
      Console.WriteLine(); 
     } 

X ...的解决方案可能更合适,更清澈且无需对于if语句和任何休息,但是你们都帮助我在没有太多手掌的情况下得到答案,我很欣赏这一点。

感谢:D