2013-04-12 23 views
13

価格の並べ替えを行い、値段を調整する必要があります。私はほとんどそれが働いているが、改善が必要です。以下はコードと出力です。どのようにすべての価格を調整するためのアイデア?これまでのところいくつかの仕事がありますが、いくつかは働きません前もって感謝します。Javaでのprintf出力の整列

//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 
+0

http://docs.oracle.com/javase/7/docs/api/java /util/Formatter.htmlは、出力をどのように整列させるかを示しています。次に例を示します。formatter.format(Locale.FRANCE、 "e =%+ 10.4f"、Math.E);ここで、10は等号と印刷される数字との間の「スペース」の数であり、4は小数点以下の桁数である。 –

答えて

16

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

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の答えにコメントとして行くことができるが、私はまだコメントする権限を持っているし、そうしないでくださいそれに答える。

3

心にバネ簡単な解決策は、スペースのStringブロックを持つことです:文字列をプリントアウトするとき

String indent = "     "; // 20 spaces. 

、実際のインデントを計算し、最後に追加してください:

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

これは、文字列のスペースの数を仲介し、それらをすべて同じ列に配置します。

+0

このような答えを見ると、Javaの 'String'には他のプログラミング言語の標準ライブラリと同様に' padLeft'、 'padRight'などがあります。 – Patashu

+1

JavaにはStringUtils.leftPad()とStringUtils.rightPad()があります。これらはApache Commons Langの一部です。 – DwB

6

printfとprintf-likeメソッドの書式仕様は、オプションのwidthパラメータをとります。

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

幅を希望の値に調整します。

+8

まず、その人について何も知らないうちに怠け者に電話しないでください。第二に、私はJavaの初心者ですが、printfについて読んだことがあります。%10dが変数の前に10個のスペースを表示することがわかりました。今、Know-it-all-and-not-lazyという、あなたのコードは私が必要とするところのどこにもありません。あなたが私の質問を読んでいれば、2番目の変数を変更する必要がある(スペースではない)スペースを除いて、3番目の変数も同じように配置されている必要があります。とにかく、ありがとう。良い一日。 – user1781482

+1

もしあなたがprintfドキュメントを読んでいれば、%10dは10のフィールド幅を指定し、%010dは0の左パッドフィールドを指定していることが分かります。 – DwB

+1

文書を読むと、フラグとして - フィールドが左揃えになることがわかります。 ex%-10d – DwB

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]); 
     } 
    } 
} 
0

あなたがコンソール上に印刷フォーマットされた色付きのテキストのために、このブログを参照することができ

https://javaforqa.wordpress.com/java-print-coloured-table-on-console/

public class ColourConsoleDemo { 
/** 
* 
* @param args 
* 
* "\033[0m BLACK" will colour the whole line 
* 
* "\033[37m WHITE\033[0m" will colour only WHITE. 
* For colour while Opening --> "\033[37m" and closing --> "\033[0m" 
* 
* 
*/ 
public static void main(String[] args) { 
// TODO code application logic here 
System.out.println("\033[0m BLACK"); 
System.out.println("\033[31m RED"); 
System.out.println("\033[32m GREEN"); 
System.out.println("\033[33m YELLOW"); 
System.out.println("\033[34m BLUE"); 
System.out.println("\033[35m MAGENTA"); 
System.out.println("\033[36m CYAN"); 
System.out.println("\033[37m WHITE\033[0m"); 

//printing the results 
String leftAlignFormat = "| %-20s | %-7d | %-7d | %-7d |%n"; 

System.out.format("|---------Test Cases with Steps Summary -------------|%n"); 
System.out.format("+----------------------+---------+---------+---------+%n"); 
System.out.format("| Test Cases   |Passed |Failed |Skipped |%n"); 
System.out.format("+----------------------+---------+---------+---------+%n"); 

String formattedMessage = "TEST_01".trim(); 

leftAlignFormat = "| %-20s | %-7d | %-7d | %-7d |%n"; 
System.out.print("\033[31m"); // Open print red 
System.out.printf(leftAlignFormat, formattedMessage, 2, 1, 0); 
System.out.print("\033[0m"); // Close print red 
System.out.format("+----------------------+---------+---------+---------+%n"); 
} 
関連する問題