方法实现打印乘法表
打印任意行数乘法表
编写一个程序,要求编写方法public static void printMultiple(int row)
实现指定行数的乘法表。
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static void printMultiple(int row) {
for (int i = 1; i <= row; i++) { // 外层循环控制行数
for (int j = 1; j <= i; j++) { // 内层循环控制每行的列数
System.out.printf("%d*%d=%-4d", j, i, i*j); // 格式化输出
}
System.out.println(); // 每行结束换行
}
}
public static void main(String[] args) {
printMultiple(9); // 打印9行乘法表
}
}
运行结果
markdown
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
代码解析:
- 外层循环变量
i
表示当前行数,从1到指定行数row
- 内层循环变量
j
表示每行中的列数,范围是1到当前行数i
printf
中的%-4d
保证每个等式占4字符宽度,左对齐更美观- 每完成一行内层循环后执行
println()
换行
变体案例解析
倒三角乘法表
编写一个程序,要求编写方法public static void printReverseMultiple(int row)
实现要反向展示乘法表。
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static void printReverseMultiple(int row) {
for (int i = row; i >= 1; i--) { // 行数递减
for (int j = 1; j <= i; j++) { // 列数随行数减少
System.out.printf("%dx%d=%-4d", j, i, i*j);
}
System.out.println();
}
}
public static void main(String[] args) {
printMultiple(9); // 打印9行乘法表
}
}
运行结果
ini
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x4=4 2x4=8 3x4=12 4x4=16
1x3=3 2x3=6 3x3=9
1x2=2 2x2=4
1x1=1
变化点:外层循环改为从大到小,内层循环依然保持从1到当前行数。这种结构适合需要递减展示的场景,比如某些游戏中的难度选择界面。
带边框的乘法表
编写一个程序,要求编写方法public static void printFramedMultiple(int row)
给乘法表加上装饰边框,提升可读性。
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static void printFramedMultiple(int row) {
int width = row * 8; // 根据行数计算边框宽度
System.out.println("+" + "-".repeat(width) + "+"); // 顶部边框
for (int i = 1; i <= row; i++) {
System.out.print("|"); // 左侧边框
for (int j = 1; j <= i; j++) {
System.out.printf("%2d*%-2d=%-3d", j, i, i*j);
}
System.out.println(" ".repeat((row-i)*8) + "|"); // 右侧边框
}
System.out.println("+" + "-".repeat(width) + "+"); // 底部边框
}
public static void main(String[] args) {
printFramedMultiple(9); // 打印9行乘法表
}
}
运行结果
markdown
+------------------------------------------------------------------------+
| 1*1 =1 |
| 1*2 =2 2*2 =4 |
| 1*3 =3 2*3 =6 3*3 =9 |
| 1*4 =4 2*4 =8 3*4 =12 4*4 =16 |
| 1*5 =5 2*5 =10 3*5 =15 4*5 =20 5*5 =25 |
| 1*6 =6 2*6 =12 3*6 =18 4*6 =24 5*6 =30 6*6 =36 |
| 1*7 =7 2*7 =14 3*7 =21 4*7 =28 5*7 =35 6*7 =42 7*7 =49 |
| 1*8 =8 2*8 =16 3*8 =24 4*8 =32 5*8 =40 6*8 =48 7*8 =56 8*8 =64 |
| 1*9 =9 2*9 =18 3*9 =27 4*9 =36 5*9 =45 6*9 =54 7*9 =63 8*9 =72 9*9 =81 |
+------------------------------------------------------------------------+
亮点 :使用String.repeat()
方法动态生成边框,根据内容自动调整宽度。这种技巧在需要动态调整输出格式时特别有用,比如控制台图形界面设计。
彩色乘法表
编写一个程序,要求编写方法public static void printColoredMultiple(int row)
实现要反向展示乘法表。 利用ANSI颜色代码让乘法表更生动:
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static void printColoredMultiple(int row) {
String[] colors = {"\033[31m", "\033[32m", "\033[33m", "\033[34m", "\033[35m"};
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= i; j++) {
String color = colors[(i+j) % colors.length]; // 动态选择颜色
System.out.printf(color + "%d*%d=%-4d\033[0m", j, i, i*j);
}
System.out.println();
}
}
public static void main(String[] args) {
printColoredMultiple(9); // 打印9行乘法表
}
}
技巧 :通过(i+j) % colors.length
实现颜色循环变化。注意颜色代码以\033[0m
重置,避免影响后续输出。这种彩色输出在日志分级显示或重要信息突出时很实用。
实战练习题
基础题
修改基础乘法表 :调整printMultiple
方法,使乘积结果右对齐而不是左对齐。要求数字列保持整齐排列。
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static void printRightAlignedMultiple(int row) {
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= i; j++) {
System.out.printf("%d*%d=%2d\t", j, i, i*j); // 改为%4d右对齐
}
System.out.println();
}
}
public static void main(String[] args) {
printRightAlignedMultiple(9); // 打印9行乘法表
}
}
运行结果
markdown
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
部分乘法表 :实现方法void printPartialMultiple(int start, int end)
,只打印从start
行到end
行的乘法表。需要考虑参数合法性校验。
提高题
空心乘法表:只打印乘法表的边框和对角线(即i==j的情况),其他位置用空格填充。这需要精确控制输出位置。
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static void printHollowMultiple(int row) {
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= row; j++) { // 注意这里改为row而不是i
if (j <= i && (j == 1 || j == i || i == row)) {
System.out.printf("%d*%d=%-4d", j, i, i*j);
} else {
System.out.print(" "); // 8空格对齐
}
}
System.out.println();
}
}
public static void main(String[] args) {
printHollowMultiple(9); // 打印9行乘法表
}
}
运行结果
ini
1*1=1
1*2=2 2*2=4
1*3=3 3*3=9
1*4=4 4*4=16
1*5=5 5*5=25
1*6=6 6*6=36
1*7=7 7*7=49
1*8=8 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
动态宽度乘法表:根据最大乘积值自动计算需要的输出宽度,而不是固定使用4字符宽度。例如9×9=81需要4字符,而12×12=144需要5字符。
综合题
乘法表HTML生成器 :创建一个生成HTML格式乘法表的方法String generateHtmlTable(int rows)
,返回的字符串可以直接写入HTML文件在浏览器中查看。要求包含基本样式(交替行背景色、居中对齐等)。
java
# 源文件保存为"MultiplicationTable.java"
public class MultiplicationTable {
public static String generateHtmlTable(int rows) {
StringBuilder html = new StringBuilder();
html.append("<table style='border-collapse: collapse;'>\n");
for (int i = 1; i <= rows; i++) {
html.append(" <tr style='background-color: "
+ (i % 2 == 0 ? "#f2f2f2" : "white") + "'>\n");
for (int j = 1; j <= i; j++) {
html.append(" <td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>")
.append(j).append("×").append(i).append("=").append(i*j)
.append("</td>\n");
}
html.append(" </tr>\n");
}
html.append("</table>");
return html.toString();
}
public static void main(String[] args) {
String s = generateHtmlTable(9); // 打印9行乘法表
System.out.println(s);
}
}
运行结果
css
<table style='border-collapse: collapse;'>
<tr style='background-color: white'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×1=1</td>
</tr>
<tr style='background-color: #f2f2f2'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×2=2</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×2=4</td>
</tr>
<tr style='background-color: white'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×3=3</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×3=6</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×3=9</td>
</tr>
<tr style='background-color: #f2f2f2'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×4=4</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×4=8</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×4=12</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>4×4=16</td>
</tr>
<tr style='background-color: white'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×5=5</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×5=10</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×5=15</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>4×5=20</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>5×5=25</td>
</tr>
<tr style='background-color: #f2f2f2'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×6=6</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×6=12</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×6=18</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>4×6=24</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>5×6=30</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>6×6=36</td>
</tr>
<tr style='background-color: white'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×7=7</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×7=14</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×7=21</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>4×7=28</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>5×7=35</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>6×7=42</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>7×7=49</td>
</tr>
<tr style='background-color: #f2f2f2'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×8=8</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×8=16</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×8=24</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>4×8=32</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>5×8=40</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>6×8=48</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>7×8=56</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>8×8=64</td>
</tr>
<tr style='background-color: white'>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>1×9=9</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>2×9=18</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>3×9=27</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>4×9=36</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>5×9=45</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>6×9=54</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>7×9=63</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>8×9=72</td>
<td style='border: 1px solid #ddd; padding: 8px; text-align: center;'>9×9=81</td>
</tr>
</table>
深入理解
乘法表看似简单,却能衍生出许多编程知识点。循环嵌套是处理二维结构的利器,格式化输出决定了展示效果。在实际开发中,类似的结构随处可见------比如生成报表、处理二维数组、构建UI布局等。
调试这类代码时,可以在内层循环结束后添加临时输出语句,比如System.out.println("已完成第"+i+"行");
,这能帮助理解循环执行流程。当输出不符合预期时,先检查内层循环的边界条件是否正确,再检查格式化字符串是否满足对齐需求。
性能方面,虽然乘法表计算量小,但如果扩展到极大行数(比如百万级),String拼接会变得低效。这时应该考虑使用StringBuilder,就像HTML生成示例中那样。这种优化意识在处理大数据量时尤为重要。