Добавление в массив числа до заданного со сдвигом вправо

У меня есть программа, где пользователь может задать число массива (например 5) и заполнить его (например 12345). У меня есть функция добавления в этот массив числа ДО или ПОСЛЕ заданного со сдвигом вправо (например добавить число 9 ДО 3 и число 7 ПОСЛЕ 3, должно получиться: 12937).

Ошибка в том, что в моей программе добавление ПОСЛЕ получается как нужно, со сдвигом вправо, а при добавлении числа ДО заданного у меня он без сдвига заменяет предыдущее число на заданное.

Помогите пожалуйста исправить код. Думаю, ошибка где-то в функции Dobavleniesosdvigomvlevo.

Java:

 
public class Mass {
    int[] mass;
    int size;
    Scanner in = new Scanner(System.in);
 
    int kolvo;
 
 
    Mass(int s) {
        this.size = s;
        this.mass = new int[size];
    }
    public void Vivod() {
        for (int i = 0;i<size;i++)
        {
            System.out.println(i+1 + " элемент массива: " + mass[i]);
        }
    }
    public void VivodZadEl(int y) {
 
        int schetchik = 0;
        for(int i =0;i<size;i++)
        {
 
            if(mass[i] == y)
            {
                System.out.println("Элемент " + y +  " это " + (i+1) +" область в массиве" );
                schetchik++;
            }
        }
        if (schetchik==0)
        {
            System.out.println("Элемент не найден" );
        }
    }
 
 
    public void add(int x) {
        if (isFull())
        {
            System.out.println("Массив заполнен");
        }
        else if(kolvo == 0)
        {
            mass[kolvo]= x;
            kolvo++;
            System.out.println("Добавлен элемент - " + x);
        }
        else
        {
            mass[kolvo]=x;
            kolvo++;
        }
 
    }
    public void adddEl(int x) {
        if(kolvo == 0)
        {
            System.out.println("Массив пуст");
        }
        else {
            int sch = 0;
            for (int i = 0; i < size-1; i++)
            {
                if(mass[i]==x)
                {
                    sch++;
                    System.out.println("Элемент нужно добавить до[1] или после[2] данного?");
                    int otvet = in.nextInt();
                    if (otvet==1) {
                        Dobavleniesosdvigomvlevo(i);
                    }
                    else if(otvet == 2)
                    {
                        Dobavleniesosdvigomvpravo(i);
                    }
                    else
                    {
                        System.out.println("Выберите команду (1 или 2)");
                    }
                    break;
                }
 
 
            }
            if (sch==0)
            {
                System.out.println("Элемент не найден");
            }
        }
    }
 
    public void Udalenie(int x) {
            if (isEmpty())
            {
                System.out.println("Массив пуст");
            }
            else
            {
                int ud = 0;
                for (int i=0;i<size-1;i++) {
                    if (x==mass[i])
                    {
                        for (int j=i ;j<=size-2;j++)
                        {
                            mass[j]=mass[j+1];
                        }
                        mass[size-1] =0;
                        kolvo--;
                        ud++;
                        System.out.println("Элемент удален");
                        break;
                    }
 
                }
                if (ud==0) {
                    System.out.println("Элемент не найден");
                }
                else
                    ud =0;
            }
    }
 
    public int Dobavleniesosdvigomvlevo(int i) {
            if (kolvo==0)
            {
                System.out.println("Массив пуст");
                return 0;
            }
            else if(i==0)
            {
                System.out.println("Невозможно добавить элемент, так как выбранный вами элемент является первым");
                return 0;
            }
            else
 
            {
                System.out.println("Введите элемент, который нужно добавить");
                int el = in.nextInt();
                mass[i - 1] = el;
                kolvo++;
                return mass[i-1];
            }
        }
    public void Dobavleniesosdvigomvpravo(int i) {
        if (i ==size-1)
        {
            System.out.println("Невозможно добавить элемент, до того, как он станет последним");
 
        }
        else if(kolvo==size)
        {
            System.out.println("Невозможно добавить элемент в массив");
 
        }
        else
        {
            System.out.println("Введите элемент, который нужно добавить");
            int el = in.nextInt();
            for (int j=size-1;j>i;j--)
            {
                mass[j]=mass[j-1];
            }
            mass[i+1]= el;
            kolvo++;
        }
    }
 
    public boolean isFull() {
        return(kolvo==size);
    }
    public boolean isEmpty(){return (kolvo==0);}
}```

Ответы (1 шт):

Автор решения: Исмаил

Здравствуй, я просто не разобрался в коде там слишком много if, else и много переменных, я тебе могу простой пример привести как можно добавить элемент в индекс. И сразу скажу что это может не быть самым оптимальным вариантом. И ещё ты можешь под себя не которые действие изменить там.

public static int[] addElement(int index, int[] array, int newElement) {
          int[] newArray = new int[array.length + 1];
          int i = 0;
          int j = 0;
          while (i < newArray.length) {
               newArray[i] = array[j];
               i++;
               j++;
               if (index == i) {
                 newArray[i] = newElement;
                 i++;
                 }
               }
      return newArray;
}

Вот есть такой вот код, тут возвращает массив можешь изменить это все можешь изменить параметры под себя как тебе удобно, но суть тут добавление в том, что с начало создается новый массив и добавляется в него элементы со старого массива, до индекса который задал, потом как только индекс и переменный i становится равными, тогда в тот индекс добавляется новый элемент, и продолжается добавление остальных элементов в новый массив со старого массива.

Не знаю на сколько будет понятно, но вот ещё объяснение на фото.

Не знаю на сколько будет понятно, но вот ещё объяснение на фото.

→ Ссылка