「Java案例」利用方法打印乘法表

方法实现打印乘法表

打印任意行数乘法表

编写一个程序,要求编写方法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生成示例中那样。这种优化意识在处理大数据量时尤为重要。

相关推荐
weixin_5247499611 分钟前
MVCC(多版本并发控制)介绍及实现原理
java·数据库
skylijf32 分钟前
C++ Primer(第5版)- Chapter 7. Classes -004
java·开发语言
泉城老铁33 分钟前
springboot+druid预防连接断开、断开后自动恢复
java·后端·架构
m1cr0wave34 分钟前
javaweb的几大常见漏洞
java·安全·web
泉城老铁41 分钟前
Spring Boot 中使用 Druid 连接池进行极致优化
java·后端·架构
Reggie_L1 小时前
JVM-Java
java·jvm·python
何中应1 小时前
EasyExcel使用
java·后端·excel
智_永无止境1 小时前
FastExcel:革新Java生态的高性能Excel处理引擎
java·excel·fastexcel
巴拉巴巴巴拉1 小时前
Maven 配置文件核心配置:本地仓库、镜像与 JDK 版本
java·开发语言·maven
rannn_1111 小时前
【Java学习|黑马笔记|Day18】Stream流|获取、中间方法、终结方法、收集方法及其练习
java·笔记·学习