Каким способом Лучший можно распечатать ячейки массива String[][] в виде таблицы, выровненной по правому краю? Например, вход
{ { "x", "xxx" }, { "yyy", "y" }, { "zz", "zz" } }
должен дать результат
x xxx
yyy y
zz zz
Это похоже на то, что один должен может выполнить с помощью java.util.Formatter, но, похоже, он не допускает непостоянной ширины поля. Лучшим ответом будет использование стандартного метода заполнения ячеек таблицы, а не вставки пробелов вручную.
Stackoverflow предназначен для вопросов. Это заказ. если вы собираетесь попытаться заставить людей делать за вас домашнее задание, по крайней мере, постарайтесь, чтобы это не выглядело так =)
1) Это не домашнее задание. 2) Вопрос подразумевается: вставьте «как мне» перед текстом вопроса.
Вы даже пытались это сделать? С какой частью вы боретесь?
@TheSoftwareJedi Часть, в которой некоторый метод, подобный printf, в JDK выполняет тяжелую работу за меня, вместо того, чтобы вручную возиться с пробелами.
На мой взгляд, вопрос резонный. Конечно, у него есть знания, чтобы создать алгоритм, выполняющий то, что он просит. По крайней мере, вы не можете получить 19,2 тысячи повторений только за то, что задаете домашние вопросы. Он просто просит путь Лучший. Зачем изобретать велосипед, если кто-то знает библиотеку? +1 за вопрос




найти длину самой длинной строки ..
слева заполните все строки пробелами, пока они не станут равными этой длине + 1
System.out. Распечатайте их, используя 2 вложенных цикла for
Возможно, необходимо сохранить длину самой длинной строки в каждом столбце, но в остальном она должна быть достаточно близкой. Кроме того, используйте printf для заполнения левого поля - вопрос был помечен как printf.
Действительно, если вы укажете ширину полей, она должна быть выровнена по правому краю. Если вам нужно иметь динамическое заполнение, минимальное для самой длинной строки, вы должны пройти по массиву, получив максимальную ширину, сгенерировать строку формата с шириной, вычисленной из этих максимумов, и использовать ее для форматирования вывода.
Динамически генерируемые форматные строки ... По лбу ... :-)
Вот ответ с использованием динамически генерируемых строк формата для каждого столбца:
public static void printTable(String[][] table) {
// Find out what the maximum number of columns is in any row
int maxColumns = 0;
for (int i = 0; i < table.length; i++) {
maxColumns = Math.max(table[i].length, maxColumns);
}
// Find the maximum length of a string in each column
int[] lengths = new int[maxColumns];
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
lengths[j] = Math.max(table[i][j].length(), lengths[j]);
}
}
// Generate a format string for each column
String[] formats = new String[lengths.length];
for (int i = 0; i < lengths.length; i++) {
formats[i] = "%1$" + lengths[i] + "s"
+ (i + 1 == lengths.length ? "\n" : " ");
}
// Print 'em out
for (int i = 0; i < table.length; i++) {
for (int j = 0; j < table[i].length; j++) {
System.out.printf(formats[j], table[i][j]);
}
}
}
Пахнет домашним заданием - формулировка вопроса похожа на задание?