**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
我想写一个生成汉明码的代码,但是当我输入“101”时,我得到一个错误:
`at java.base/java.util.AbstractList.subListRangeCheck(AbstractList.java:509)
at java.base/java.util.ArrayList.subList(ArrayList.java:1108)
at kotlin.collections.CollectionsKt___CollectionsKt.slice(_Collections.kt:866)
at ProverkaKt.main(proverka.kt:52)`
我刚到Kotlin,所以不明白问题出在哪里。
import kotlin.math.*
fun main(args: Array<String>) {
val option = readLine()!!.toInt()
if(option == 1){
println("Введите биты данных")
val d = readLine()!!
val raz = d.toMutableList()
val data = raz.reversed()
println(data)
var (c: Int, ch: Int, j: Int) = List(3) { 0 }
val h : ArrayList<Int> = ArrayList()
var r = 0.0
while ( (d.length + r + 1) > (2.0.pow(r))) {
r = r + 1
}
for(i in 0 until ((r+data.size).toInt())){
val p = 2.0.pow(c)
val k = data[j].toString()
if(p.toInt() == (i+1)) {
h.add(0)
c = c + 1
}
else {
h.add(k.toInt())
j = j + 1
}
println(h)
}
println("---------------------------")
for(parity in 0 until h.size){
val ph = 2.0.pow(ch)
if (ph.toInt() == (parity + 1)) {
val startIndex: Int = ph.toInt() - 1
var i = startIndex
var toXor : ArrayList<Int> = ArrayList()
while( i < h.size) {
val block = h.slice(i .. ((i+ph).toInt()))
toXor += block
i += 2 * ph.toInt()
println("toXor = $toXor")
println("H = $h")
println("startIndex = $startIndex")
}
for (z in 1 until toXor.size) {
h[startIndex]=h[startIndex] xor toXor[z]
}
ch+=1
}
}
h.reverse()
println("Сгенерированный код Хэмминга будет: - ")
print(h.toString())
}
}
我的英语不好,所以我不知道如何做类似的问题。
为了发布代码,还需要编写一些其他的东西,这到底是什么必要的
1条答案
按热度按时间r6vfmomb1#
这意味着你试图访问索引 8,在一个 * 没有 * 第8个索引的集合中。如果你的集合是
[a, b, c]
,那么它是3个元素,所以你可以使用索引 0 来索引 2。任何更高或更低的都是越界的。您的错误来自
main()
的第 52 行上的slice
调用,即:所以
i
或i+ph
太大了(根据错误,它是 8),所以你需要找出发生这种情况的原因,你可以试着调试代码,或者记录变量的值,这样你就可以观察它们是如何变化的(看看哪里出错了)。