分享

Kotlin 的 99 个练习题(1)

 知识情报院 2022-02-21

1.查找列表的最后一个元素。

示例

last(listOf(112358))
// output:
// 8

解决代码:

import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test

fun <T> last(list: List<T>): T = list[list.lastIndex]

class P01Test {
    @Test fun `find the last element of a list`() {
        assertThat(last(listOf(112358)), equalTo(8))
    }

    @Test(expected = IndexOutOfBoundsException::class)
    fun `last element in empty list`() {
        last(listOf<Int>())
    }
}

2.查找列表的倒数第2个元素。

示例

penultimate(listOf(112358))
// output:
// 5

解决代码:

package org.kotlin99.lists

import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test

fun <T> penultimate(list: List<T>) = list[list.lastIndex - 1]

class P02Test {
    @Test fun `find the last but one element of a list`() {
        assertThat(penultimate(listOf(112358)), equalTo(5))
    }

    @Test(expected = IndexOutOfBoundsException::class)
    fun `penultimate element in list smaller than 2`() {
        penultimate(listOf(1))
    }
}


3. 查找列表的第N个元素

nth(2, listOf(112358))
// output:
// 2

解决代码:

package org.kotlin99.lists

import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test
import org.kotlin99.common.tail
import java.util.NoSuchElementException

tailrec fun <T> nth(n: Int, list: List<T>): T {
    if (n < 0throw IllegalArgumentException()
    return if (n == 0) list.first() else nth(n - 1, list.tail())
}

class P03Test {
    @Test fun `find the Nth element of a list`() {
        assertThat(nth(2, listOf(112358)), equalTo(2))
    }

    @Test(expected = NoSuchElementException::class)
    fun `Nth element outside of list size`() {
        nth(100, listOf(112358))
    }
}

4. 计算列表中的元素个数

示例

length(listOf(112358))
// output:
// 6

解决代码:

package org.kotlin99.lists

import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test
import org.kotlin99.common.tail

fun <T> length(list: List<T>): Int =
    if (list.isEmpty()) 0 else 1 + length(list.tail())

class P04Test {
    @Test fun `find the number of elements of a list`() {
        assertThat(length(listOf<Int>()), equalTo(0))
        assertThat(length(listOf(112358)), equalTo(6))
    }
}

5. 反转一个列表

示例

reverse(listOf(112358))
// output:
// [8, 5, 3, 2, 1, 1]

解决代码:

package org.kotlin99.lists

import com.natpryce.hamkrest.assertion.assertThat
import com.natpryce.hamkrest.equalTo
import org.junit.Test
import org.kotlin99.common.tail

fun <T> reverse(list: List<T>): List<T> =
    if (list.size <= 1) list
    else reverse(list.tail()) + list.first()

class P05Test {
    @Test fun `reverse a list`() {
        assertThat(reverse(listOf<Int>()), equalTo(emptyList()))
        assertThat(reverse(listOf(1)), equalTo(listOf(1)))
        assertThat(reverse(listOf(112358)), equalTo(listOf(853211)))
    }
}


今天给大家分享了Kotlin的 5 个示例代码练习,大家都学会了吗?我们后面给大家带来更多的 Kotlin 示例

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多