我有一个函数可以从字符串参数中获取摘要
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/