如何打印格式规整的记忆化表格?集合内容致格式错乱求解
解决记忆化表格打印格式错乱的问题
目标打印格式
Weights --> 0 1 2 3 4 5 6 ------------------------------------------------------------------------------------ {} 0 0 0 0 0 0 0 {1} 0 0 0 0 0 6 6 {1, 2} 0 0 18 18 18 18 18 {1, 2, 3} 0 2 18 20 20 20 20
问题原因
当前代码中,集合内容(如{}、{1}、{1,2})的输出没有固定宽度,不同长度的集合占用字符数不同,导致后续数字列无法对齐,出现格式错乱。
解决代码
将集合内容先拼接成完整字符串,再通过printf的固定宽度格式化输出,确保集合列占用统一宽度,后续数字列就能保持对齐:
public static void printTable(int M[][], int n, int row, int W) { System.out.println("\nMemoization table, Row " + row + " completed"); System.out.println("\t\t\tWeights -->"); for (int i = 0; i <= W; i++) { System.out.printf("%8d", i); } System.out.println("\n------------------------------------------------------------------------------------"); for (int i = 0; i < M.length; i++) { // 构建集合字符串 StringBuilder sb = new StringBuilder(); sb.append("{"); if (i > 0) { for (int j = 1; j <= i; j++) { sb.append(j); if (j < i) { sb.append(", "); } } } sb.append("}"); // 固定宽度输出集合,%16s保证占16个字符宽度,可根据需求调整 System.out.printf("%16s", sb.toString()); for (int j = 0; j < M[i].length; j++) { System.out.printf("%8d", M[i][j]); } System.out.print("\n"); } }
说明
%16s会将集合字符串格式化为16字符宽度的内容,默认右对齐,和目标格式的列对齐方式一致;- 如果需要调整集合列的宽度,只需修改
%16s中的数字即可,确保和目标格式的列宽匹配。
内容的提问来源于stack exchange,提问作者Nancy Drake
相关产品推荐
相关产品推荐

