九九乘法表需外层i从1到9、内层j从1到i,确保不重复不漏行且格式对齐;每行输出j*i,用制表符分隔,行末换行。

Java里用双重for循环打印九九乘法表,核心是控制内层循环上限
输出格式对齐、不重复、不漏行——关键不在嵌套本身,而在 i 和 j 的范围关系。外层 i 代表行(1–9),内层 j 必须只循环到 i(即 j ),否则会打出上三角全表(如 1×2、2×1 都出现),失去“九九”递进感。
常见错误现象:
• 输出 9×9=81 行(81 行全是完整乘积)
• 每行都从 j = 1 到 9,导致前几行堆满无意义的 “1×4=4”“2×5=10” 等
• 行末多一个制表符或空格,对齐错乱
- 外层循环:
for (int i = 1; i - 内层循环:
for (int j = 1; j (不是 <code>j ) - 每行结束后必须加
System.out.println(),不能只靠\t或print
对齐问题:用 \t 不可靠,固定宽度更稳妥
不同数字位数不同(如 “1×1=1” 占位少,“7×8=56” 占位多),纯用 \t 在不同终端/字体下容易错行。实际项目中宁可多算一位,用空格补足。
使用场景:IDE 控制台、简单脚本输出;若需严格对齐(比如导出为文本报告),应统一字段宽度。
立即学习“Java免费学习笔记(深入)”;
- 推荐写法:
System.out.printf("%d×%d=%-2d\t", j, i, j * i)(%-2d左对齐、占 2 位) - 避免:
System.out.print(j + "×" + i + "=" + j*i + "\t")—— 字符串拼接无法控制数字宽度 - 注意:
printf中顺序是j×i,因为内层是j,外层是i,但习惯读作 “j 乘 i”,所以先输出j
想倒序打印(9×9 开头)?改外层起始和条件就行
不是重写逻辑,只是调整循环方向。很多人卡在“怎么让第一行是 9×1=9, 9×2=18…”,其实只需把外层改成从 9 递减,内层仍保持 j 即可。
性能/兼容性无影响,纯属控制流变化;但要注意变量名语义是否还清晰——如果保留 i 表示“行号”,那它现在是从 9 往下,别在注释里写“i 从 1 到 9”。
- 倒序外层:
for (int i = 9; i >= 1; i--) - 内层不变:
for (int j = 1; j - 输出仍用
j×i,这样第 1 行就是1×9,2×9…符合“9 的乘法行”直觉
别忽略换行时机:println() 必须在内层循环外
这是新手最常粘贴错的位置。把 System.out.println() 写在内层循环体内,结果是每个乘法式子后都换一行,输出变成竖着一列;写在内层之外、外层之内,才是一行多个式子、换行在行尾。
错误示范:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + j*i + "\t");
System.out.println(); // ❌ 这里换行,每项都独占一行
}
}
正确位置:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "×" + i + "=" + j*i + "\t");
}
System.out.println(); // ✅ 这里换行,整行输出完再换
}
边界情况容易被忽略:当 i == 1 时,内层只跑一次,println() 依然要执行,否则第一行不换行,后续所有行会挤在一起。











