String.format()出错

4 java string format

下面是简单的代码,我java.util.IllegalFormatConversionException每当i == 0.

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);
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下我做错了吗?谢谢.

Joh*_*sen 5

这是一个奇怪的.看起来第二个条件(i == 0?r.nextInt():r.nextFloat())由于第二个参数而将两者都转换为Float.从来没见过这个.

这是有效的:

    public static void main(String[] args) {
        java.util.Random r = new java.util.Random();
        int i = r.nextInt(2);
        String s;
        if(i == 0){
            s = String.format("%d", r.nextInt());
        }
        else{
            s = String.format("%f", r.nextFloat());
        }
        System.out.println(s);
    }
Run Code Online (Sandbox Code Playgroud)