2016-07-08 8 views
1

私はプログラミングが比較的新しいです、そして、私は現在、C#を手に入れようとしています。私は '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

2番目のforループのロジックは正常ではありません。 'column + row> = 4'というようなことはしないと書いてありますので、2番目のforループの最初の4行は、それは実行されません。 – jacob

+3

デバッガの使い方を学ぶことをお勧めします。また、 'forループ'の読んでリフレッシュしてください。 – MethodMan

+0

あなたの答えをあなたの質問に入れるのではなく、実際のサイトの答えにしてください。 – zero298

答えて

1

問題は二ネストされたループ、column + row >= 4ためのループ状態にある5行をしたいです。列はゼロから始まるので、最初の実行は基本的にはrow >= 4と同じです。したがって、行番号< 5では印刷されません。これはまさしく最初のループの条件です。これは、すべてのスペースが印刷され、次にたくさんの星が印刷されることを意味します。

基本的に2番目のループ条件であるため、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

ありがとう、私は2番目のループで条件が決して満たされなかったという事実を完全に逃しました。最後に解決策を得ました。 – 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(); 
} 

は、あなたが回線ごとの正確な数の*が続くスペースの正確な数を入れていることを確認です。

ヒント:あなたはおそらく唯一のない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 ... 'sのソリューションは、おそらくより適切で明確であり、かつ必要なしif文と休憩のために、あなたは手をあまり持たずに答えに達するのを手伝ってくれました。私はそれを感謝します。

ありがとう:D

関連する問題