原代码:
public class Fibonacci
{
public static void main(String[] args)
{
int F[] = new int[30];
F[0] = 1;
F[1] = 1;
for (int i = 2; i < 30; i++)
{
F[i] = F[i - 1] + F[i - 2];
}
for (int i = 0; i < 30; i++)
{
System.out.print(F[i]);
System.out.print(" ");
if ((i+1) % 6 == 0)
{
System.out.println();
}
}
}
}
原输出结果:

目标输出结果:
问题分析
原代码使用System.out.print(F[i] + " ")
输出,由于斐波那契数列数值位数逐渐增加(如第30项为6位数的832040
),导致输出无法对齐。
解决方案
使用格式化输出控制每个数字的显示宽度,通过printf
方法配合格式说明符%Nd
(N
为固定宽度)实现右对齐。
数字前面加个负号实现左对齐
步骤说明
- 确定最大位数:数列第30项是
832040
(6位),因此设置固定宽度为6
。 - 替换输出方法:用
System.out.printf("%6d", F[i])
替代原有输出,确保每个数字占据6字符宽度。 - 移除多余空格:格式化输出已包含对齐,无需额外添加空格。
- 保留换行逻辑:每输出6个数字后换行。
优化后的代码
public class Fibonacci {
public static void main(String[] args) {
int F[] = new int[30];
F[0] = 1;
F[1] = 1;
for (int i = 2; i < 30; i++) {
F[i] = F[i - 1] + F[i - 2];
}
for (int i = 0; i < 30; i++) {
System.out.printf("%6d", F[i]); // 格式化为6字符宽度
if ((i + 1) % 6 == 0) {
System.out.println(); // 每6个换行
}
}
}
}
输出效果
1 1 2 3 5 8
13 21 34 55 89 144
233 377 610 987 1597 2584
4181 6765 10946 17711 28657 46368
75025 121393 196418 317811 514229 832040
关键点解释
%6d
的作用:强制每个数字占6字符宽度,不足部分左侧补空格,实现右对齐。- 换行逻辑:
(i + 1) % 6 == 0
确保每行显示6个数字后换行。 - 适用性:此方法适用于数值位数不超过设定宽度的情况(本例中6位足够)。
通过这种方式,输出结果将严格按列对齐,便于阅读。
补充
方法名错误:System.out.print 不支持格式化字符串(如 %6d),应使用 printf 方法。