Erreur avec de la Ficelle.format()
Ci-dessous est simple code, j'ai eu java.util.IllegalFormatConversionException
chaque fois que 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);
La trace de la pile:
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)
Quelqu'un pourrait-il expliquer si je fais mal? Merci.
OriginalL'auteur | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
C'est une bizarre. Ressemble à la deuxième conditionnelle (i == 0 ? r.nextInt() : r.nextFloat()) est coulée à la fois pour Flotter en raison de la deuxième paramètre. Jamais vu cela avant.
Voici quelque chose qui fonctionne:
désolé pour supprimer un commentaire, je me souviens que j'ai accepté la vôtre d'abord, puis Banthar 🙂
OriginalL'auteur John Ericksen
i == 0 ? r.nextInt() : r.nextFloat()
est du type float.?:
opérateur ne peut pas retourner à la foisint
etfloat
.OriginalL'auteur Piotr Praszmo
Comment à ce sujet:
OriginalL'auteur Alexander Pogrebnyak
En Chaîne.le format le premier paramètre est le format, mais dans votre exemple ci-dessus, vous avez l'initiale de %s comme premier paramètre, puis %d ou %f que l'objet à substitués pour
Vous avez besoin de faire quelque chose comme ceci:
?:
ne peut que retourner un type (ouint
, oufloat
), car les réponses 🙂OriginalL'auteur darren102