本文教你使用二维字符串数组存储国家与首都数据,并通过动态计算列宽、封装辅助方法实现对齐美观的表格输出,避免简单循环导致的错位问题。
在 Java 中,用二维数组模拟“表格”是一种常见且实用的入门实践(注意:此处的“table”并非 Java 特定术语,而是指逻辑上的行列结构)。初学者常遇到的核心难点不是数据存储,而是格式化输出——即让 Country 和 Capital 两列严格对齐,形成视觉清晰的表格效果。直接使用 System.out.println() 逐行打印每个元素会导致列宽不一致;而 printf 配合动态空格填充才是专业解法。
下面是一个结构清晰、职责分离的实现方案:
public class Arrays39 {
public static void main(String[] args) {
String[][] countries = {
{"Mexico", "DF"},
{"Guatemala", "Guatemala City"},
{"El Salvador", "El Salvador"},
{"Russia", "Moscow"}
};
int maxCountryLength = maxPadding(countries);
generateTable(countries, maxCountryLength);
}
// 主输出方法:按固定列宽格式化打印表头与每行数据
public static void generateTable(String[][] data, int padding) {
// 表头:Country 后补足空格,再拼接 Capital
System.out.printf("Country%sCapital%n", " ".repeat(Math.max(0, padding - "Country".length() + 1)));
for (String[] row : data) {
// 每行:国家名 + 动态空格 + 首都名
int spacesNeeded = Math.max(0, padding - row[0].length() + 1);
System.out.printf("%s%s%s%n", row[0], " ".repeat(spacesNeeded), row[1]);
}
}
// 辅助方法:计算第一列(国家名)的最大字符长度
private static int maxPadding(String[][] data) {
int max = 0;
for (String[] row : data) {
if (row[0].length() > max) {
max = row[0].length();
}
}
return max;
}
}✅ 关键改进点说明:
⚠️ 注意事项:
掌握这种“数据结构 + 格式化逻辑分离”的思维模式,是你从语法练习迈向工程化编码的重要一步。