我试图在Kotlin上编写简单的Stack,但是所有数据容器总是抛出ArrayIndexOutOfBoundsException。我无法找出可能导致此问题的原因:
class StackX(size: Int) {
private var maxSize: Int = size
private var stackArray: Array<Long> = arrayOf(maxSize.toLong())
private var top = -1
fun push(data: Long) {
stackArray[++top] = data
}
fun pop() : Long {
return stackArray[top--]
}
fun peek() : Long {
return stackArray[top]
}
fun isEmpty() : Boolean {
return (top == -1)
}
fun isFull() : Boolean {
return (top == maxSize -1)
}
}
在这种情况下,请您解释一下阵列声明的正确模式吗?我想要这个:
int a[] = new int[10];
P.S。它是测试代码,我甚至不会调用pop。它推动了。我只是想了解声明的错误。
答案 0 :(得分:1)
这一行是问题所在
private var stackArray: ArrayList<Long> = arrayListOf()
。
它创建一个长度为0的数组。
也许,你想要这样的东西
val stackArray: LongArray = LongArray(size)
。
答案 1 :(得分:1)
问题在于您的push()
方法。
private var stackArray: ArrayList<Long> = arrayListOf() // size = 0
private var top = -1
fun push(data: Long) {
stackArray[++top] = data // top = 0
}
您尝试做的是获取空列表的0th
元素。
可能的解决方法:
fun push(data: Long) {
stackArray.add(data)
++top
}
<强>更新强>
创建指定大小的int
数组:
int[] a = new int[10]; // Java
val a = IntArray(10) // Kotlin
所有元素都初始化为零。
创建DataItem
数组:
DataItem[] b = new DataItem[10]; // Java
val b = arrayOfNulls<DataItem>(10) // Kotlin
所有元素都已初始化为null
。