- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在解决 Codewars 中的问题:https://www.codewars.com/kata/56a5d994ac971f1ac500003e/train/kotlin输入是一个字符串数组和一个整数 k,输出是通过从数组中连续取出 k 个元素并将它们连接到字符串可以形成的最长字符串。下面是我解决这个问题的代码,我现在正在测试它。
fun main() {
val array = arrayOf("1", "2", "3", "4", "5", "6", "7")
println(longestConsec(array, 2))
// Combinations below don't work either
// val array = arrayOf("1", "2", "3", "4","5", "6", "7", "8", "9")
// println(longestConsec(array, 3))
//
// val array = arrayOf("1", "2", "3", "4","5", "6", "7", "8", "9", "10", "11")
// println(longestConsec(array, 4))
// val array = arrayOf("1", "2", "3", "4","5", "6", "7", "8", "9", "10", "11", "12", "13")
// println(longestConsec(array, 5))
}
fun longestConsec(strings: Array<String>, size: Int) =
when {
strings.isEmpty() || size > strings.size || size <= 0 -> ""
else -> ConsecutiveString(strings.toList(), size)
.searchLongestConsecutiveString(0, mutableListOf())
.maxBy { it.length } ?: throw IllegalArgumentException()
}
class ConsecutiveString(private val originalList: List<String>, private val size: Int) {
tailrec fun searchLongestConsecutiveString(index: Int, acc: MutableList<String>): List<String> {
println("start")
return when {
index + size >= originalList.size -> acc
else -> {
println(index + size)
// *** doesn't work ***
searchLongestConsecutiveString(
index + 1
, acc.apply { add(originalList.subList(index, index + size).joinToString("")) }
)
// *** doesn't work ***
// *** works ***
// val consecutiveString = originalList.subList(index, index + size).joinToString("")
// searchLongestConsecutiveString(
// index + 1
// , acc.apply { add(consecutiveString) }
// )
// *** works ***
}
}
}
}
此代码抛出 java.lang.IndexOutOfBoundsException,这是堆栈跟踪。
start
2
start
3
start
4
start
5
start
6
Exception in thread "main" java.lang.IndexOutOfBoundsException: toIndex = 8
at java.util.ArrayList.subListRangeCheck(ArrayList.java:1010)
at java.util.ArrayList.subList(ArrayList.java:1002)
at ConsecutiveString.searchLongestConsecutiveString(CodeWars.kt:37)
at CodeWarsKt.longestConsec(CodeWars.kt:22)
at CodeWarsKt.main(CodeWars.kt:4)
at CodeWarsKt.main(CodeWars.kt)
Process finished with exit code 1
这里有 3 件有趣的事情。
我尝试不使用 tailrec,但结果是相同的。
谁能帮我弄清楚这里发生了什么?
我的环境如下。
操作系统:Windows 10 家庭版
IntelliJ IDEA:2019.2(社区版)11.0.3+12-b304.10 amd64
Kotlin:1.3.41-release-150(JRE 1.8.0_151-b12)
IntelliJ Kotlin 插件:1.3.50-release-IJ2019.2-1
最佳答案
您在acc.apply
内调用size
。在该范围内,size
指的是 acc
的大小,而不是 ConsecutiveString::size
。
避免使用 apply
或使用标签:
this@ConsecutiveString.size
关于java - 整数 n 作为 List<String>.sublist(fromIndex, toIndex) 的第二个参数传递,但堆栈跟踪显示 Kotlin 中的 toIndex 是 n + 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888353/
我正在尝试在下面写的第二行中使用 indexOf 方法,因为你知道你需要在逗号后面放置一个整数,但就我而言,我不想这样做输入一个实际的整数,我想输入一个整数变量。 (guessedLetter变量是我
我只是想知道 formIndex ofstring.indexOf(searchValue[, fromIndex]) 有什么用?我发现这样的代码: for (var sA in secondOnA
关于网站中提到的语法 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/index
测试代码 public class HelloWorld{ public static void main(String []args){ System.out.printl
我有一个暴露给 $scope 的数组,称为练习,其中包含练习数组,这些练习是这样的对象: [ { "exerciseName": "Half Lunge ", "exerci
我将列表转换为Page以显示带有分页的候选人表格,但我收到错误 java.lang.IllegalArgumentException: fromIndex(5) > toIndex(1) 如何解决这个
我用 创建了一个简单的项目弧 , 其中我有 UITableView .我有 NSMutableArray的 NSMutableDictionary . 喜欢 ( { c
我正在学习 Learn COCOS2D 一书中的 BOX2D 教程,我开始在控制台上每秒看到 10 次这样的错误。我用谷歌搜索了这个错误,但找不到任何相关信息。有些人在谈论着色器文件,但我不知道那些是
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
谁能解释一下为什么 Java Vector 中的 removeRange(int fromIndex, int toIndex) 受到保护? 语法 - protected synchronized v
我正在解决 Codewars 中的问题:https://www.codewars.com/kata/56a5d994ac971f1ac500003e/train/kotlin输入是一个字符串数组和一个
我是一名优秀的程序员,十分优秀!