2016-07-08 162 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