2016-12-24 4 views
4

私は、C#とプログラミング全般にスーパーです。私は来月に学校に入る前に、オンラインでいくつかの練習をして、言語の基礎を理解するようにしています。 私はスーパーシンプルなプログラムを書いています。なぜそれが何をしているのか理解できず、どこでも答えを見つけることができませんでした。ここにコードがあります。ループをスキップするための行

 int i, j, rows; 

     Console.Write("\n\n"); 
     Console.Write("Display the pattern like right angle triangle which repeat a number in a row:\n"); 
     Console.Write("-------------------------------------------------------------------------------"); 
     Console.Write("\n\n"); 

     Console.Write("Input number of rows : "); 
     rows = Convert.ToInt32(Console.ReadLine()); 
     for (i = 1; i <= rows; i++) 
     { 
      for (j = 1; j <= i; j++) 
       Console.Write("{0}", i); 
       Console.Write("\n"); 

     } 

このプログラムはすべて、同じ番号の単純なピラミッドであると想定されています。

私の質問は、ループする第二に、それはiを書き込むですが、それは代わりに、ループの最後の実行が終了するまで\nを書くのj++j<=を再評価します。なぜ私は理解できないのですか?プログラムは動作しますが、私はなぜそれを理解していません。あなたがそれを壊さない限り、forループは常にその中のすべてを実行するとは思いませんか?

非常に初心者の質問には申し訳ありませんが、そのナットを運転しています!

+3

これはPythonではなく、字下げは何も意味しません。一緒に実行されることを意図しているときは、内側のループの下にある2つの行を中括弧で囲んでループの本体にします。それ以外の場合、ループ本体は1つの文だけです。書かれているように、2番目のConsole.Writeはjではなくiに適用されます。 –

+2

@AlexJolig手元にある問題の要点である間違いを「修正」している質問のコードを決して編集しないでください。 OPは、はっきりとインデントを混乱させ、あなたの「修正」はこのQ&A全体を完全に破ります。 –

+0

@KirkWoll Fine! –

答えて

3

forループは、そのスコープ内のすべてを実行します。 {}を使わないと、forループのスコープはその次の行です。あなたはそのような中括弧でそれらを配置する必要があり、複数のコマンドを実行するには:

for (j = 1; j <= i; j++) 
{ 
    Console.Write("{0}", i); 
    Console.Write("\n"); 
} 

を一般的には、常に読みやすくするために{}を持っているし、必要に応じて簡単にループを更新するのがベストプラクティスです。あなたはforループを書くことができますが、それは完全に読みやすいでしょう。

for (i = 1; i <= rows; i++) 
for (j = 1; j <= i; j++) 
{ 
    Console.Write("{0}", i); 
    Console.Write("\n"); 
} 

上記のコードは、最初のループの2番目のループを保持するのと同じことを行います。

私はあなたがあなたの変数をforループの外に宣言したことに気付きました。あなたはforループの特定の機能を意識していないかもしれません。

あなたが右のループのために、あなたのイテレータを宣言することができます。

for (int i = 1; i <= rows; ++i) 

ほとんどの場合、それはそれは私が 'のためのループと同じスコープを与えるとして、このようなループのためのあなたのイテレータを宣言する方が良いでしょう。

forループの別のきれいな機能は、セミコロン間のすべてのオプションが実際はオプションであることです。あなたがforループの外あなたのイテレータを宣言したのであれば、たとえば、あなたがforループでそれを省略することができます。

int i = 1; 
for (; i<= rows; ++i) 

は、あなたもその一部または全部を省略することができます

for (;;) // a perfectly valid for loop that will loop forever. 

をあなたもすることができます

for (int i = 0, j = 0; i < 5; ++i, ++j) 
4

すべてのステートメントをプログラミングするには、実行するスコープブロックがあります。 デフォルトでは、ループの直後に1つのステートメントスコープしかありません。 forループスコープで1つ以上のステートメントを実行する場合は、中括弧{}を使用してコードブロックを定義します。

あなたの場合は、このような中括弧を使用して両方のステートメントを実行する必要があります。すべてのあなたの条件およびループ構造で、中括弧{}を使用する

for (j = 1; j <= i; j++) 
{ 
    Console.Write("{0}", i); 
    Console.Write("\n"); 
} 

その最高のプログラミング手法。コードを読みやすく理解しやすくなります。インナーforループの反復ごとに、両方のConsole.Write文が実行されますことを

2

あなたの予想は間違っている:

for (j = 1; j <= i; j++) 
    Console.Write("{0}", i); //inner for loop scope starts and ends on this statement 

は、内側forループの後には中括弧がありません。したがって、デフォルトでは、最初のステートメントはfor文の後に出現し、内部のスコープの下で扱われますforループ。以下に示すように

外側forループは、中括弧を有する:

for (i = 1; i <= rows; i++) 
{//outer for loop scope starts here 
    for (j = 1; j <= i; j++) 
     Console.Write("{0}", i); 
    Console.Write("\n"); 
}//outer for loop scope ends here 

そこでループの外のすべての反復において全内部forループとConsole.Write("\n");を実行します。

forループの中で実行する文が1つしかない場合は、コードスニペットに示されているようにタブでインデントします。

関連する問題