Добавление к левой и правой сторонам задачи динамического массива - PullRequest
0 голосов
/ 14 апреля 2019

Итак, я пытаюсь создать динамический массив в Java.Для этого вопроса существует один основной массив с именем store, который имеет определенный размер.Внутри хранилища находится своего рода псевдомассив, который использует кусок хранилища в качестве динамического массива.Левая и правая переменные - это индексы, которые служат головкой и хвостом для динамического массива соответственно.Это означает, что значение left - это индекс, с которого начинается динамический массив в хранилище, а right - это конец.

Я пытался сделать для этого методы 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 () используется для расширения массива хранилищ всякий раз, когда одна сторона динамического массива достигает конца.

1 Ответ

1 голос
/ 14 апреля 2019

Сделал некоторые предположения о типах данных и заменил ваши функции на команды system.out.Я вышел из связанных исключений в циклах for, так что я думаю, что ваша ошибка связана с вашим массивом с именем store store[j] = store[j+1]; строка, выходящая за пределы области видимости цикла for, также выходит за пределы: store[left + 1 + i] = x;

Этообоснованное предположение Если вы можете опубликовать весь свой код, я выполню его и, надеюсь, может дать лучший ответ!Не уверен, что переменные size, left, right, store [] и CAP.

update:

Не удалось запустить программу после обновления метода addRight.Создан временный массив из магазина с размером +1.Храните затем клоны темп.вот моя идея о том, как приблизиться к методу 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...