2015-03-24 5 views
0

Я пытаюсь распечатать табличное представление игры с 8 играми.Динамическая установка ширины поля в строке форматирования printf

Я знаю, как использовать форматирование печати, то есть printf("%2s", ..) и т. Д., Но я не уверен, как это можно изменить в зависимости от размера воспроизводимой платы (возможно, 3x3, 5x5, ...).

можно получить длину максимального числа путем кодирования:

String.valueOf(Side*Side - 1).length() 

и хранить, что в межд. Как я мог бы получить этот int, чтобы заменить 2 в примере printf выше?

Есть ли лучший способ сделать это? Благодарю.

+0

Вы пытались построить динамическую цепочку динамически? Это должно дать вам правильный шаблон для вывода. –

+0

«Есть ли лучший способ сделать это?» Что вы ищете, когда говорите * лучше *? – rageandqq

+0

Оказывается, мне не нужно менять табличное представление, основанное на размере входных данных платы - требования потребовали отформатировать доску с помощью% 3s. Еще хорошо учиться. Можете ли вы пояснить, что вы имеете в виду, @DavisBroda. Как это сделать? –

ответ

0

Чтобы получить целое число в качестве вашей длины поля в формате, просто сцепить его как часть строки:

int maxWidth = String.valueOf(Side*Side - 1).length(); 
printf("%" + maxWidth + "s", ....); 

Строка форматирования представляет собой строку, как и любой другой.

+0

Awesome. Благодаря! –

0

Вы хотите динамически построить шаблон String и поместить туда все. Например, для платы 3x3 вам может понадобиться шаблон "%n\t%n\t%n\n%n\t%n\t%n\n%n\t%n\t%n", который будет печататься как сетка 3x3 на консоли, если поставляется с 9 цифровыми входами. Для построения шаблона выполните следующие действия:

public String makeTemplate(size){ 
    StringBuilder builder = new StringBuilder(); 
    for(int i = 0;i < size;i++){ 
     for(int i = 0;i < size-1;i++){ 
      builder.append("%n\t"); 
     } 
     builder.append("%n\n"); 
    } 
    return builder.toString(); 
} 

Используйте это шаблоны, полученные подобным способом, чтобы правильно отформатировать вывод. Пример использования приведен ниже:

public void someMethod(){ 
    int[] numbers = new int[9]; //fill in array with numbers 
    String template = makeTemplate(3); 
    String formatted = String.format(template,numbers); 
    System.out.println(formatted); 
} 
+0

Gottchha! Таким образом, используя String.format (template, numbers), он заполнит шаблонными папками% n номерами, хранящимися в числах []. Круто! Не знал, что вы можете это сделать, спасибо –

Смежные вопросы