Добавление в левую и правую части проблемы динамического массива

#java #arrays #dynamic

#java #массивы #динамический

Вопрос:

Итак, я пытаюсь создать динамический массив на 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:

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

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

Обновить:

Удалось запустить программу после обновления метода addRight. Создан временный массив из хранилища размером 1. Затем хранилище клонирует 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;
 

Комментарии:

1. www19.zippyshare.com/v/S48aygWB/file.html , www19.zippyshare.com/v/gYUggd3X/file.html вторая ссылка является абстрактной и содержит конструктор переменные

2. тай, я попробую это