文字配列または文字列の入力-より良い方法を探しています

オリア・グルーバー

次のタスクを実行する非常に単純なC#コードを作成しました。

nスペースの量を表す数値与えられると、私のプログラムは砂時計を印刷します。

*****
 ***
  *
 ***
*****

nコマンドウィンドウの左側の境界壁からの開始スペース。

私のコードは意図したとおりに機能しますが、非常に乱雑でまとまりがなく、より良い方法があると確信しています。おそらく、.NET Frameworkを開発したマイクロソフト開発者によって以前にC#で実装されたものです。

これは私のコードです:

public static void printAsterisk(int initialSpace)
{
    int i, j;
    char[] asteriskMsg = new char[5 * initialSpace + 25];
    for (i = 0; i < initialSpace; i++)
    {
        asteriskMsg[i] = ' ';
    }
    for (j = i; j < i + 5; j++)
    {
        asteriskMsg[j] = '*';
    }
    asteriskMsg[j] = '\n';
    for (i = j + 1; i < j + initialSpace + 1; i++)
    {
        asteriskMsg[i] = ' ';
    }
    for (j = i + 1; j < i + 4; j++)
    {
        asteriskMsg[j] = '*';
    }
    asteriskMsg[j] = '\n';
    for (i = j + 1; i < j + initialSpace + 3; i++)
    {
        asteriskMsg[i] = ' ';
    }
    asteriskMsg[i] = '*';
    asteriskMsg[i + 1] = '\n';
    for (j = i + 2; j < i + initialSpace + 3; j++)
    {
        asteriskMsg[j] = ' ';
    }
    for (i = j; i < j + 3; i++)
    {
        asteriskMsg[i] = '*';
    }
    asteriskMsg[i] = '\n';
    for (j = i + 1; j < i + initialSpace + 1; j++)
    {
        asteriskMsg[j] = ' ';
    }
    for (i = j; i < j + 5; i++)
    {
        asteriskMsg[i] = '*';
    }
    string s = new string(asteriskMsg);
    System.Console.Write("{0}", s);
}

}

かなり恐ろしいです。このコードを改善する方法について非常に興味があります。私が言っていることの例を示すために、これはプログラムがどのように実行されるかですn=25 ここに画像の説明を入力してください

nがゼロの場合、同じ画像が表示されますが、25個のスペースではなく、左側の壁から始まります。私が何をしようとしているのかが明確になったことを願っています。

編集:文字列を使用して自分で素晴らしいソリューションを思い付くことができました!

public static void printAsterisk(int initialSpace)
{
    string firstRow = "*****", secondRow = "***", thirdRow = "*", firstRowSpaces = new string(' ', initialSpace), secondRowSpaces = new string(' ', initialSpace+1), thirdRowSpaces = new string(' ', initialSpace+2);
    string hourglass = string.Format("{0}{1}\n{2}{3}\n{4}{5}\n{2}{3}\n{0}{1}", firstRowSpaces, firstRow, secondRowSpaces, secondRow, thirdRowSpaces, thirdRow);
    System.Console.WriteLine(hourglass);
}
オグズオズグル

私はこの質問が好きでした:)

これが私のやり方です。これは本当に楽しいので、本当に他の人を期待しています:)

public class Program
{
    public static void Main(string[] args)
    {
        PrintHourGlass(25);
    }

    /// <summary>
    /// Prints an hour glass starting at the given offset
    /// </summary>
    /// <param name="indent">The starting offset</param>
    static void PrintHourGlass(int indent)
    {
        PrintAsteriks(indent, 5); // offset = indent, print 5 *          [I]*****
        PrintAsteriks(indent + 1, 3); // offset = indent + 1, print 3 *  [I] ***
        PrintAsteriks(indent + 2, 1); // offset = indent +3, print 1 *   [I]  *
        PrintAsteriks(indent + 1, 3); // offset = indent + 1, print 3 *  [I] ***
        PrintAsteriks(indent, 5); // offset = indent, print 5 *          [I]*****
    }

    /// <summary>
    /// Prints given number of * characters starting from the given offset
    /// </summary>
    /// <param name="indent">The starting offset</param>
    /// <param name="asterisks">The number of * characters to print</param>
    static void PrintAsteriks(int indent, int asterisks)
    {
        // Check starters guide to string.Format here:
        // https://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx#Starting

        // string format uses a template and allows you to pass in and format arguments as you like.
        // The template below evaluates to {0,25}{1} for indent = 25 and asteriks = 5
        // which means,
        // print argument 0 (first parameter), no extra formatting, pad the output to 25 characters
        // print argument 1, no formatting
        string formatString = "{0," + indent + "}{1}";

        // Console.WriteLine method uses string.Format internally
        // Below, for the template, argument 0 is null
        //     (since we want to print only 25 characters, the padding.
        //     The value could have been "" instead of null)
        // Argument 1 is a string of * characters, with the length specified by asteriks parameter
        Console.WriteLine(formatString, null, new string('*', asterisks));

        // Therefore, it outputs 25 linear white spaces, then 5 * characters.
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

文字列配列を出力するためのより良い方法を探しています

分類Dev

Cで文字の配列をシフトするためのより良い方法を探しています

分類Dev

ジグザグ配列のより良い方法を探しています

分類Dev

文字列操作の最良の方法を探しています

分類Dev

より良いSQLクエリを探しています

分類Dev

文字列配列に新しい値を追加するためのより良い方法はありますか?

分類Dev

Pythonで文字列の入力配列を使用して、追加された複数の置換メソッドを書き直すためのより良い方法はありますか?

分類Dev

入力文字列から文字列の配列を作成します

分類Dev

VimでFキーをマッピングするためのより良い方法を探しています

分類Dev

点線のパスを文字列として取得するためのより良い方法はありますか?

分類Dev

文字入力を文字列の配列にコピーします

分類Dev

文字列に対して複数の置換を行うためのより良い方法はありますか?

分類Dev

文字列デコード:より良いアプローチを探しています

分類Dev

作業環境を自動化するより良い方法を探しています

分類Dev

JSONをPython辞書に変換する(より良い方法を探しています)

分類Dev

辞書式順序-パラメータとして2文字の配列、より良い解決策を探しています

分類Dev

データを並べ替えるより良い方法を探しています

分類Dev

遺伝的アルゴリズムのより良い評価方法を探しています

分類Dev

2つの文字列の各文字を比較します。新規で入力を探しています

分類Dev

文字列を解析して検索するためのより良い方法は?

分類Dev

PHPは配列/文字列を自動入力します

分類Dev

空の文字列が入力された後、Pythonは入力を停止します

分類Dev

私が使用しているよりも、json文字列を「きれいに印刷」するためのより良い方法はありますか?

分類Dev

Javaで文字列の配列から未入力の値またはnull値を削除する

分類Dev

Pythonで文字列からの入力を解析するためのより良い方法は?

分類Dev

nullまたは空の文字列について変数をチェックするより良い方法は?

分類Dev

文字列はどのように配列に入力されますか

分類Dev

文字列配列に文を入力して逆の順序で表示しようとしています

分類Dev

入力された文字列または宣言された文字列にstrtok()を使用することの違い

Related 関連記事

  1. 1

    文字列配列を出力するためのより良い方法を探しています

  2. 2

    Cで文字の配列をシフトするためのより良い方法を探しています

  3. 3

    ジグザグ配列のより良い方法を探しています

  4. 4

    文字列操作の最良の方法を探しています

  5. 5

    より良いSQLクエリを探しています

  6. 6

    文字列配列に新しい値を追加するためのより良い方法はありますか?

  7. 7

    Pythonで文字列の入力配列を使用して、追加された複数の置換メソッドを書き直すためのより良い方法はありますか?

  8. 8

    入力文字列から文字列の配列を作成します

  9. 9

    VimでFキーをマッピングするためのより良い方法を探しています

  10. 10

    点線のパスを文字列として取得するためのより良い方法はありますか?

  11. 11

    文字入力を文字列の配列にコピーします

  12. 12

    文字列に対して複数の置換を行うためのより良い方法はありますか?

  13. 13

    文字列デコード:より良いアプローチを探しています

  14. 14

    作業環境を自動化するより良い方法を探しています

  15. 15

    JSONをPython辞書に変換する(より良い方法を探しています)

  16. 16

    辞書式順序-パラメータとして2文字の配列、より良い解決策を探しています

  17. 17

    データを並べ替えるより良い方法を探しています

  18. 18

    遺伝的アルゴリズムのより良い評価方法を探しています

  19. 19

    2つの文字列の各文字を比較します。新規で入力を探しています

  20. 20

    文字列を解析して検索するためのより良い方法は?

  21. 21

    PHPは配列/文字列を自動入力します

  22. 22

    空の文字列が入力された後、Pythonは入力を停止します

  23. 23

    私が使用しているよりも、json文字列を「きれいに印刷」するためのより良い方法はありますか?

  24. 24

    Javaで文字列の配列から未入力の値またはnull値を削除する

  25. 25

    Pythonで文字列からの入力を解析するためのより良い方法は?

  26. 26

    nullまたは空の文字列について変数をチェックするより良い方法は?

  27. 27

    文字列はどのように配列に入力されますか

  28. 28

    文字列配列に文を入力して逆の順序で表示しようとしています

  29. 29

    入力された文字列または宣言された文字列にstrtok()を使用することの違い

ホットタグ

アーカイブ