Kotlin中的列表或数组总是空的

时间:2018-02-05 14:32:23

标签: kotlin

我试图在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。它推动了。我只是想了解声明的错误。

2 个答案:

答案 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