Добавление в массив числа до заданного со сдвигом вправо
У меня есть программа, где пользователь может задать число массива (например 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 становится равными, тогда в тот индекс добавляется новый элемент, и продолжается добавление остальных элементов в новый массив со старого массива.
Не знаю на сколько будет понятно, но вот ещё объяснение на фото.
