21

配列からの価格でアイテムのリストを表示する必要があり、価格を揃えたいと思います。ほとんど動作していますが、改善が必要です。以下はコードと出力です。すべての価格を揃える方法はありますか? これまでのところ、一部は機能しますが、一部は機能しません。前もって感謝します。

//for loop
System.out.printf("%d. %s \t\t $%.2f\n",
                i + 1, BOOK_TYPE[i], COST[i]);

出力:

1. Newspaper         $1.00
2. Paper Back        $7.50
3. Hardcover book        $10.00
4. Electronic book       $2.00
5. Magazine          $3.00
4

5 に答える 5

31

以下の例を試すことができます。左インデントを確実にするために、幅の前に「-」を使用してください。デフォルトでは、右にインデントされます。これはあなたの目的に合わないかもしれません。

System.out.printf("%2d. %-20s $%.2f%n",  i + 1, BOOK_TYPE[i], COST[i]);

フォーマット文字列の構文: http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

数値印刷出力のフォーマット: https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

PS: これは DwB の回答へのコメントになる可能性がありますが、コメントする権限がまだないため、回答しています。

于 2013-04-12T00:46:08.500 に答える
4

printfおよび printf に似たメソッドのフォーマット仕様は、オプションの width パラメータを取ります。

System.out.printf( "%10d. %25s $%25.2f\n",
                   i + 1, BOOK_TYPE[i], COST[i] );

幅を目的の値に調整します。

于 2013-04-12T00:35:55.240 に答える
4

頭に浮かぶ簡単な解決策はString、スペースのブロックを持つことです。

String indent = "                  "; // 20 spaces.

文字列を出力するときは、実際のインデントを計算して末尾に追加します。

String output = "Newspaper";
output += indent.substring(0, indent.length - output.length);

これにより、スペースの数が文字列に仲介され、それらがすべて同じ列に配置されます。

于 2013-04-12T00:31:42.347 に答える
1

最長の bookTypes 値に基づいて bookType 列の幅 (つまり、bookTypes 値の形式) を設定する潜在的な解決策を次に示します。

public class Test {
    public static void main(String[] args) {
        String[] bookTypes = { "Newspaper", "Paper Back", "Hardcover book", "Electronic book", "Magazine" };
        double[] costs = { 1.0, 7.5, 10.0, 2.0, 3.0 };

        // Find length of longest bookTypes value.
        int maxLengthItem = 0;
        boolean firstValue = true;
        for (String bookType : bookTypes) {
            maxLengthItem = (firstValue) ? bookType.length() : Math.max(maxLengthItem, bookType.length());
            firstValue = false;
        }

        // Display rows of data
        for (int i = 0; i < bookTypes.length; i++) {
            // Use %6.2 instead of %.2 so that decimals line up, assuming max
            // book cost of $999.99. Change 6 to a different number if max cost
            // is different
            String format = "%d. %-" + Integer.toString(maxLengthItem) + "s \t\t $%9.2f\n";
            System.out.printf(format, i + 1, bookTypes[i], costs[i]);
        }
    }
}
于 2016-08-30T04:10:40.263 に答える