2017-08-21 14 views
0

。しかし、繰り返し文字を印刷するには2つのループが必要ですが、行をインデントするのに問題があります。ここに私のコードは、それが印刷ASCII

XXXXXXX 
XXXXX 
    XXX 
    X 

ようにする必要があり、入力4と入力3.

XXXXX 
XXX 
    X 

で以下のような形状をプリントアウトするための簡単なコンソールC#プログラムでなければなりません。 2つのforループは文字を正しく取得しますが、ラインはすべて中央ではなく左に並んでいます。

static void Main(string[] args) 
    { 
     string num = Console.ReadLine().Trim(); 
     int n = Convert.ToInt32(num); 
     int k=1; 
     for(int i = n; i>=1; i--) 
     { 
      Console.WriteLine("\n"); 
      Console.WriteLine("".PadLeft(n)); 
      for (int j = (2*i-1); j>=1;j--) 
      {     
        Console.Write("0"); 
      } 
     } 
     Console.Read(); 
    } 
+0

こんにちは、実際の結果と期待されたものだけでなく、あなたのコードをここに入れてください。しかし、コードを投稿すると、まだまだあなたが..あなたの答えに熱望していません。コードジェネレータ*ではありません。デバッグ用の場合は、[コードレビュー](https://codereview.stackexchange.com/)で尋ねたいと思うかもしれません。 –

+0

はい、ループのための2つは、正しく文字を取得しますが、行がすべて左ではなく、中央に並びました。 –

+0

スペースが固定されていないため、PadLeft(n)は機能しません。 –

答えて

0

声明:

Console.WriteLine("".PadLeft(n)); 

は右アイデアですが、それはかなりありません。あなたのケースでは

nは、印刷したい行数で、不変です。各行の先頭に必要な空白の数はゼロから始まり、各行につき1ずつ増加する必要があります。いずれの場合においても

は、(それはWriteLineだから)改行が続くスペースの任意の数がを印刷することは、あなたが望むものではありません、あなたは代わりにWriteを使用する必要があります。あなたはそこにいくつかの他の変化に気づくでしょう

for (int lineNum = 0; lineNum < n; lineNum++) { 
    int spaceCount = lineNum; 
    int xCount = (n - lineNum) * 2 - 1; 

    Console.Write("".PadLeft(spaceCount)); 
    Console.WriteLine("".PadLeft(xCount, 'X')); 
} 

だからint型n = Convert.ToInt32(num);Console.Read();間のコードのようなもののようにしたほうが良いでしょう。まず、より意味のある変数名を使用しました。私はちょっとしたことですが、iを使用することは状況によっては問題ありませんが、わかりやすい名前を使用する方が読みやすいことがよくあります。

私はも同様にして内部ループの必要性を排除するためにPadLeftを使用しました。

関連する問題