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

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之类的字符串:)


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!