以下は単純なコードです。の場合はいつもjava.util.IllegalFormatConversionException
となっています。String.format()のエラー
java.util.Random r = new java.util.Random();
int i = r.nextInt(2);
String s = String.format(
String.format("%s", i == 0 ? "%d" : "%f"),
i == 0 ? r.nextInt() : r.nextFloat());
System.out.println(s);
スタックトレース:私が間違ってやっている場合
Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Float
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4011)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2725)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2677)
at java.util.Formatter.format(Formatter.java:2449)
at java.util.Formatter.format(Formatter.java:2383)
at java.lang.String.format(String.java:2781)
at hb.java.test.App.testCompiler(App.java:17)
at hb.java.test.App.main(App.java:10)
誰かが説明していただけますか?ありがとうございました。
+1素晴らしいキャッチ!条件演算子(http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.25) – nybbler
@ジョンの仕様に従って、実際にこれを正しく処理しています。削除されたコメントを申し訳ありません。私はあなたのものを最初に受け入れたのを覚えておいてください。そして、Bantharさんの:-) –