2

私の目的は、互いに隣接する2つの長方形を描くことです。長方形を描画するコードを書きましたが、隣接する 2 つの長方形を描画できませんでした。どこに問題があるかはわかりますが、それを修正する方法がわかりません。助けていただければ幸いです。

class DrawRectangles
{           
    static void Main(){
        Console.WriteLine(DrawRectangle(8,8)+DrawRectangle(4,3));
    }
    static string DrawRectangle(int width,int length){
        StringBuilder sb = new StringBuilder();
        string first = "+" + " -".StringMultiplier(width-1)+ " + ";
        sb.AppendLine(first);
        for(int i=0; i<length-1;i++)
            sb.AppendLine("|"+" ".StringMultiplier(2*width-1)+"|");
        sb.Append(first);
        return sb.ToString();
    }
}   

internal static class StringExtensions
{       
    public static string StringMultiplier(this string value,int count){
        StringBuilder sb = new StringBuilder(count);
        for(int i=0;i<count;i++)
            sb.Append(value);
        return sb.ToString();
    }       
}

期待される出力:

+ - - - - - - - +
| | | |
| | | |
| | | |
| | |+ - - - +
| | || | |
| | || | |
| | || | |
+ - - - - - - - ++ - - - +

現在の出力:

+ - - - - - - - +
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
+ - - - - - - - ++ - - - +
| | | |
| | | |
+ - - - +
4

2 に答える 2

3

まず、同じことを行うためにStringMultiplier使用できるため、拡張機能は不要です。System.String(Char, Int32)

実際に必要なコードは次のとおりです。

// Assume the Tuples are <height, width>
string DrawRectangles(params Tuple<int, int>[] measurements)
{
    var sb = new StringBuilder();
    var maxHeight = measurements.Max(measurement => measurement.Item1);

    for (var h = maxHeight; h > 0; h--)
    {
        foreach (var measurement in measurements)
        {
            // If you're on the top or bottom row of a rectangle...
            if (h == 0 || measurement.Item1 == h)
            {
                sb.Append(String.Format("{0}{1}{0}", "+", new String('-', measurement.Item2 - 2)));
                continue;
            }

            // If you're in the middle of a rectangle...
            if (measurement.Item1 > h)
            {
                sb.Append(String.Format("{0}{1}{0}", "+", new String(' ', measurement.Item2 - 2)));
                continue;
            }

            sb.Append(new String(' ', measurement.Item2));
        }

        sb.Append(Environment.NewLine);
    }

    return sb.ToString();
}

使用法:

var output = DrawRectangles(new Tuple(8, 8), new Tuple(4, 3), etc...);
于 2013-01-18T05:36:50.823 に答える
1

このコードの挿入

string first = "+" + " -".StringMultiplier(width-1)+ " + ";

このパターンを簡単に使用できます。

string first = string.Format("+{0}+", new string('-', width - 2));
于 2013-01-18T05:35:55.750 に答える