Я бы подумал, что это было бы понятнее:
String i1 = "Pepperoni", i2 = "Sausage", i3 = "Canadian Bacon";
System.out.printf("%s\n%s\n%s\n", i1, i2, i3);
System.out.printf("Your pizza includes ingredients: %s %s %s", i1, i2, i3);
Дело в том, что если вы вообще собираетесь использовать printf
, вы также можете использовать его способность присоединяться к строкам.вместе.
Из вашего комментария я понимаю, что количество ингредиентов является переменным.Если это так, то использование printf
для форматирования «списка» (как я делал выше) не приведет к его сокращению.Вместо этого вам нужен вспомогательный метод, подобный следующему:
public static String join(String separator, Object[] things) {
StringBuilder sb = new StringBuilder();
for (Object thing : things) {
if (sb.length() > 0) {
sb.append(separator);
}
sb.append(thing);
}
return sb.toString();
}
Затем ...
Object[] ingredients = new Object[]{i1, i2, i3}; // ... or a dynamic sided array
System.out.print(join("\n", ingredients));
System.out.println("Your pizza includes ingredients: " + join(" ", ingredients));
Я утверждаю, что это более общий принцип (работает с массивами переменного размера), который легче понять,и, возможно, более эффективный, чем другие предложения.
(вспомогательный метод join
существует в различных формах в ряде библиотек классов; например, в классе Apache Commons StringUtils
.)