#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. тай, я попробую это