Почему я не могу передать переменную в виде строки формата в System.out.printf (...) в Java? - PullRequest
4 голосов
/ 03 апреля 2012

Я пытался передать строковый объект в System.out.printf (...) в Java, но продолжал получать эту ошибку "java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0", которая на самом деле не имеет большого смысла для меня.

String format = "%" + (3 * n) + "s"; // n is an int defined somewhere above, could be 0
System.out.printf(format, "My string");

Кто-нибудь знает, разрешено ли это?

Изменить для более подробной информации:

int n = 0;
String fm = "%" + (3 * level) + "s";
String realFm = "%0s";
System.out.println("fm = " + fm);
System.out.println("realfm = " + realFm);
System.out.println("equals? " + (fm.equals(realFm)));
System.out.printf(fm, " ");

Вот вывод:

fm = %0s
realfm = %0s
equals? true
java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0

Спасибо

1 Ответ

11 голосов
/ 03 апреля 2012

Да, это разрешено, но оно не будет работать, если n равно 0. Есть ли вероятность этого (похоже на это из сообщения об ошибке)?

что если вы добавите строку в свой коддля его отладки:

// line added below for debugging. To remove later:
System.out.println("n is: " + n); 

String format = "%" + (3 * n) + "s"; // n is an int defined somewhere above
System.out.printf(format, "My string");

печатает ли он когда-либо n is: 0?

например,

public static void main(String[] args) {

  // try the for loop with n = 0 vs. n = 1
  for (int n = 1; n <= 10; n++) {
     // line added below for debugging. To remove later:
     System.out.println("\nn is: " + n); 

     String format = "%" + (3 * n) + "s"; 
     System.out.printf(format, "My string");
  }      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...