1. 简介

乘法表是一种基础的数学工具,以表格形式展示两个数字相乘的结果。它不仅是教学中常用的辅助工具,也在各种实际计算任务中非常有用。

在本教程中,我们将探讨如何使用 Kotlin 生成乘法表,并展示三种不同的实现方式:使用 for 循环、while 循环,以及函数式编程方式。每种方法都适用于不同的场景,帮助你根据具体需求选择最合适的实现。

2. 使用 for 循环

当已知迭代范围时,for 循环是一个非常合适的选择

下面是一个使用 for 循环生成乘法表的函数:

private fun generateMultiplicationTableUsingForLoop(num: Int): String {
    val table = StringBuilder()
    for (i in 1..10) {
        val product = num * i
        table.append("$num * $i = $product\n")
    }
    return table.toString().trim()
}

我们还应该编写单元测试来验证其输出是否正确:

@Test
fun `generate multiplication table using for loop`() {
    val num = 6
    val expectedTable = """
        6 * 1 = 6
        6 * 2 = 12
        6 * 3 = 18
        6 * 4 = 24
        6 * 5 = 30
        6 * 6 = 36
        6 * 7 = 42
        6 * 8 = 48
        6 * 9 = 54
        6 * 10 = 60
    """.trimIndent()

    val actualTable = generateMultiplicationTableUsingForLoop(num)

    assertEquals(expectedTable, actualTable)
}

该测试使用 JUnit 的 assertEquals() 方法验证函数输出是否与预期一致。

3. 使用 while 循环

当我们需要对循环进行更精细的控制时(例如在循环体中进行条件判断或动态修改变量),while 循环是更合适的选择

下面是使用 while 循环实现的乘法表函数:

private fun generateMultiplicationTableUsingWhileLoop(num: Int): String {
    val table = StringBuilder()
    var i = 1
    while (i <= 10) {
        val product = num * i
        table.append("$num * $i = $product\n")
        i++
    }
    return table.toString().trim()
}

对应的单元测试如下:

@Test
fun `generate multiplication table using while loop`() {
    val num = 10
    val expectedTable = """
        10 * 1 = 10
        10 * 2 = 20
        10 * 3 = 30
        10 * 4 = 40
        10 * 5 = 50
        10 * 6 = 60
        10 * 7 = 70
        10 * 8 = 80
        10 * 9 = 90
        10 * 10 = 100
    """.trimIndent()

    val actualTable = generateMultiplicationTableUsingWhileLoop(num)

    assertEquals(expectedTable, actualTable)
}

测试逻辑与之前类似,确保输出与预期一致。

4. 使用函数式编程方式

如果你偏好简洁、声明式的代码风格,Kotlin 的函数式编程特性是理想选择。这种方式通常更简洁、易读,也更符合现代编程风格。

下面是使用函数式方式生成乘法表的实现:

private fun generateMultiplicationTableFunctionally(num: Int): String {
    return (1..10).map { i ->
        val product = num * i
        "$num * $i = $product"
    }.joinToString("\n")
}

对应的单元测试如下:

@Test
fun `generate multiplication table functionally`() {
    val num = 7
    val expectedTable = """
        7 * 1 = 7
        7 * 2 = 14
        7 * 3 = 21
        7 * 4 = 28
        7 * 5 = 35
        7 * 6 = 42
        7 * 7 = 49
        7 * 8 = 56
        7 * 9 = 63
        7 * 10 = 70
    """.trimIndent()

    val actualTable = generateMultiplicationTableFunctionally(num)

    assertEquals(expectedTable, actualTable)
}

这段代码使用了 Kotlin 的 mapjoinToString 方法,将整个逻辑变得更紧凑。

5. 总结

本教程中我们介绍了三种生成乘法表的方法:

✅ 使用 for 循环:适合已知迭代范围的情况
✅ 使用 while 循环:适合需要更灵活控制循环逻辑的场景
✅ 使用函数式方式:代码更简洁,适合现代 Kotlin 编程风格

无论选择哪种方式,都建议配合单元测试来确保逻辑正确。这不仅有助于避免 bug,也方便未来进行维护和扩展。你可以根据项目风格或个人喜好灵活选用。


原始标题:Generate Multiplication Table in Kotlin