抛出IllegalArgumentException

抛出IllegalArgumentException

我有一个函数可以从字符串参数中获取摘要

fun plusMinus(expression: String): Int {
    try {
        val numbers = expression.split(" ")
    } catch (e: Exception) {
        throw e
    }
    var sum = 0
    val numbers = expression.split(" ")
    if (expression[0].isDigit()) {
        sum = numbers[0].toInt()
        for (i in 1 until numbers.size) {
            if (numbers[i] != "+" && numbers[i] != "-") {
                when (numbers[i - 1]) {
                    "+" -> sum += numbers[i].toInt()
                    "-" -> sum -= numbers[i].toInt()
                }
            }
        }
    }
    return sum
}
问题在于,我不理解如何抛出IllegalArgumentException权限;有此功能的测试:
assertEquals(4, plusMinus("2 + 2"))
assertEquals(6, plusMinus("2 + 31 - 40 + 13"))
assertThrows(IllegalArgumentException::class.java) { plusMinus("+2") }
assertThrows(IllegalArgumentException::class.java) { plusMinus("2+2") }
assertThrows(IllegalArgumentException::class.java) { plusMinus("44 - - 12") }
因此,如果存在以下情况,则应引发异常:1)标记之间没有空格2)彼此附近没有相等的标记(例如在第五次测试中)

最佳答案

我认为有两个容易遵循的规则:

  • 即使您的拆分中的索引也必须是数字
  • 拆分中的
  • 不均匀索引必须为+-

  • 其他所有情况均无效。这样够了吗?
    numbers.forEachIndexed { index, value ->
        if (index % 2 == 0 && !value.matches(Regex("[0-9]+"))) throw IllegalArgumentException()
        if (index % 2 != 0 && !value.matches(Regex("[+-]+"))) throw IllegalArgumentException()
    }
    
    编辑:必须进行改进以覆盖+ 1 - 1之类的字符串:)

    关于kotlin - 如何正确抛出IllegalArgumentException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62969312/

    10-10 08:34