添加到动态数组问题的左侧和右侧

问题描述 投票:0回答:1

所以我试图用Java创建一个动态数组。对于这个问题,有一个名为store的主数组,它有一个已定义的大小。在商店中是一种伪阵列,它利用一大块商店作为动态数组。左右变量分别是动态数组的头部和尾部的索引。这意味着left的值是存储中的动态数组开始的索引,右边是结尾。

我一直在努力为此制作addleft和addright方法,但我一直在超越边界错误。但是,我不确定我到底出了什么问题。

    boolean add(int i, int x){
        if (i<0 || i>size) return false;
        if (i<size-i)
            addLeft(i,x);
        else
            addRight(i,x);
        return true;
    }//add
    void addLeft(int i, int x){
        size ++;
        left--;
        if(left == -1) {
            restore();
        }
        for(int j = left; j < left + i; j++) {
            store[j] = store[j+1];
        }
        store[left + 1 + i] = x;
        return;
    }//addLeft
    void addRight(int i, int x){
        size ++;
        right++;
        if(right == CAP+1) {
            restore();
        }
        for(int j = right; j > left + i; j--) {
            store[j] = store[j-1];
        }
        store[left + 1 + i] = x;
        return;
    }//addRight

我正在寻找的结果是输入要插入索引的整数,然后是左边(对于addleft)或右边(对于addright)的值,以转移到它们各自的方向。 restore()方法用于在动态数组的一端到达末尾时展开存储阵列。

java arrays dynamic
1个回答
1
投票

做了一些数据类型的假设,并用system.out命令替换了你的函数。我在for循环中得到了超出限制的异常,所以我认为你的错误是你的数组名为store store[j] = store[j+1];,你的for循环范围之外的行也是超出界限的:store[left + 1 + i] = x;

这是一个有根据的猜测如果你可以发布你的整个代码我将运行它,希望能给出一个更好的答案!不确定变量大小,左,右,存储[]和CAP是什么。

更新:

能够在更新addRight方法后运行程序。从商店创建一个临时数组,大小为+1。然后存储clones temp。这是我对如何处理addRight方法的想法。

void addRight(int i, int x){
        size++;
        right++;
        if(right == CAP+1) {
            restore();
        }
        int[] temp;
        temp = new int[store.length+1];

        for(int j = 0; j <= store.length; j++) {
            if(j < i){
            temp[j] = store[j];
            }
            else if (j == i) {
            temp[j] = x;
            }
            else if( j > i)
            {
                temp[j] = store[j-1];
            }
        }
        store = new int [temp.length];
        for(int k = 0; k < temp.length; k++)
        {
            store[k] = temp[k];
        }
        return;
© www.soinside.com 2019 - 2024. All rights reserved.