質問: `%-8s%3d%5.1f` `%3.1f~:%2d` これらはどういういみですか。コードでは下のようになっています。 ``` System.out.printf("%-8s%3d%5.1f\n", x[i].name, x[i].height, x[i].vision); System.out.printf("%3.1f~:%2d人\n", i / 10.0, vdist[i]); ```
回答: これはC言語のprintf関数由来の書き方で、データを文字列にする際にうまく整形 (フォーマット) するために使われるものです。たとえば`%d`は整数値を10進表記の文字列 (**d**ecimal number) にするもの、`%f`は浮動小数点数 (**f**loating-point number) を10進表記の文字列にするものです。 ``` System.out.printf("3.14 + 3.14 の答えは %f です。", 3.14 + 3.14); // ==> "3.14 + 3.14 の答えは 6.280000 です。" と出力されます。 ``` 単に`%f`とだけ書くと小数を表示するだけですが、表示する桁数を固定するなどもっと良い感じにしたい場合があります。そのためのオプションも用意されており、たとえば`%.2f`と書くと小数点以下2桁までに整形されます。 ``` System.out.printf("3.14 + 3.14 の答えは %.2f です。", 3.14 + 3.14); // ==> "3.14 + 3.14 の答えは 6.28 です。" と出力されます。 ``` 質問文にあるのはすべてこの類のものです。いくつか列挙して説明します。 * `%s`: 文字列 + `-`: 結果が左揃えになります。 + 数字: 文字幅 + たとえば`%-8s`だと文字幅8の左詰めで表示します。 * `%d`: 10進表記の数値 + 数字: 桁数 + たとえば`%3d`だと3桁の整数で表示します。 * `%f`: 浮動小数点数 + 数字.数字: 小数点より上の桁数と、下の桁数。 + たとえば`%5.1f`だと、小数点より上は5桁、下は1桁で表示します。 数字の部分を変えて実行しなおしたときにどう表示が変わるかを観察すると分かりやすいかもしれません。 また、ここで紹介したもの以外にもいくつかオプションがあります。 より正確かつ詳しい情報については、以下のドキュメントを参考にしてください。 * 書式文字列の構文 - クラスFormatter -- Java Platform, Standard Edition 8 API仕様