列表或数组在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 = arrayListOf()的问题private var stackArray: ArrayList = arrayListOf()
它创建一个长度为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