import java.util.Scanner;

public class AddElementToSpecificPosition {

    private static  Scanner scanner = new Scanner(System.in);


    public static void main(String[] args) {

        int[]  array =arrayDetails();
        scanner.nextLine();
        System.out.println("Enter the position for the element \r");
        int position = scanner.nextInt();
        System.out.println("Enter the  element \r");
        int element = scanner.nextInt();
        addElementToSpecificPositoin(array,position,element);

    }

    //getting details form user for arry
    private static int [] arrayDetails() {

        System.out.println("Enter the length for the array \r");
        int length = scanner.nextInt();
        scanner.nextLine();
        int [] intArray =  new int[length];
        System.out.println("Enter the numbers for the array \r");
        for(int i=0; i<intArray.length; i++) {
            intArray[i] = scanner.nextInt();
        }
        return intArray;
    }

    //trying to add an element to specific position

    private static void addElementToSpecificPositoin(int[] array, int position, int element) {
        int lastIndexValue = array[array.length-1];
        
        for (int i=array.length-1; i>position-1 ; i-- ) {
            array[i]=array[i-1];
        }
        array[position-1] = element;
        int addedPosition = array.length ;
        int [] newArray = new int[addedPosition+1];
        for (int i =0; i<newArray.length; i++) {
            newArray[i] = array[i]; 
        }
        
        newArray[addedPosition] = lastIndexValue;
        
        for (int j =0; j<newArray.length; j++) {
            System.out.println(newArray[j]);
        }


    }

}
0
Chinmay 11 Окт 2021 в 17:16

2 ответа

Лучший ответ

Массивы имеют фиксированный размер, а java передается по значению. Передача переменной массива никогда не будет присвоена этой переменной.

private static int[] insert(int[] array, int position, int element) {
   int[] largerArray = Arrays.copyOf(array, array.length + 1);
   System.arraycopy(largerArray, position, largerArray, position + 1,
       array.length - position);
   largerArray[position] = element;
   return largerArray;
}

array = insert(array, 13, 42);

Вышеупомянутый использует класс Arrays с хорошими служебными функциями. А System.arraycopy - это быстрая функция для копирования срезов массива. Он также имеет дело с перекрывающимися срезами.

Вам необходимо присвоить переданной в массив переменной полученный в результате больший массив.

0
Joop Eggen 11 Окт 2021 в 14:35

array - это размер X. Как бы то ни было, назовем его X. Затем вы делаете:

int addedPosition = array.length;
int[] newArray = new int[addedPosition + 1];

Другими словами, newArray имеет размер X + 1. Затем вы проходите цикл от 0 до newArray.length и разрешаете array[i] для каждого i. Это, конечно, означает, что разрешен array[X], который не является несуществующей записью.

Вместо того, чтобы спрашивать о SO, вам следует потратить немного времени и научиться отлаживать. Это просто! Все, что вам на самом деле нужно сделать, это выяснить, что должна делать строка кода (просто взглянув на нее и, по сути, «будучи компьютером». Используйте ручку и бумагу, если хотите), затем запускайте код построчно и проверяйте, что код на самом деле делает то, что, по вашему мнению, должно.

Если, продумывая его построчно и работая над ним, вы понимаете, что код - это не то, что вам нужно: отлично, вы нашли ошибку. Исправьте это и продолжайте применять этот процесс. В противном случае вы поймете, когда то, что на самом деле делает код, не соответствует тому, что вы думали. В этом очень помогают отладчики, но может помочь и масса операторов System.out.println. Вы бы поняли это, как только поймете, например, с помощью пример ввода массива размером 4 заканчивается запуском newArray[4] = array[4].

0
rzwitserloot 11 Окт 2021 в 14:28