列表或数组在Kotlin中始终为空
我试图在Kotlin上编写简单的堆栈,但是所有的数据容器总是抛出ArrayIndexOutOfBoundsExceptionexception。 我找不出可能导致这个问题的原因:
class StackX(size: Int) { private var maxSize: Int = size private var stackArray: Array = 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];
PS这是测试代码,我什至不叫流行。 它抛出推。 我只是想了解声明有什么问题。
这行是private var stackArray: ArrayList
的问题private var stackArray: ArrayList
。
它创建一个长度为0的数组。
也许,你想要这样的val stackArray: LongArray = LongArray(size)
。
问题在于你的push()
方法。
private var stackArray: ArrayList = 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
(10) // Kotlin 所有元素都被初始化为
null
。