#java #arrays
Вопрос:
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]);
}
}
}
Комментарии:
1. Если вы сможете объяснить, что вы делаете для каждой строки в своем
addElementToSpecificPositoin
, вы, возможно, сможете найти свою проблему. Также отладчик может помочь вам точно показать, что происходит в этом методе во время его выполнения и где именно вы попали в исключение.
Ответ №1:
Массивы имеют фиксированный размер, а 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
является быстрой функцией для копирования фрагментов массива. Он также имеет дело с перекрывающимися срезами.
Вам нужно назначить переменной переданного массива результирующий массив большего размера.
Ответ №2:
array
это размер X. Что бы это ни было, давайте назовем его X. Тогда вы делаете:
int addedPosition = array.length;
int[] newArray = new int[addedPosition 1];
Другими словами, newArray
имеет размер X 1. Затем вы проходите цикл от 0 до newArray.length
1 и решаете array[i]
для каждого i. Это, конечно, означает array[X]
, что решена несуществующая запись.
Вместо того, чтобы спрашивать об этом, вам следует потратить немного времени и научиться отлаживать. Это просто! Все, что вы действительно делаете, это выясняете, что должна делать строка кода (просто глядя на нее и в основном «будучи компьютером». Используйте ручку и бумагу, если хотите), затем запустите код строка за строкой и убедитесь, что код действительно делает то, что вы считаете нужным.
Если, продумав это строчку за строчкой и проработав, вы поймете, что код не тот, что вы хотели: отлично, вы нашли ошибку. Исправьте это и продолжайте применять этот процесс. В противном случае вы поймете, когда то, что на самом деле делает код, не соответствует тому, что вы думали. Отладчики очень помогают при этом, но также может помочь множество System.out.println
инструкций. Вы бы поняли это, как только поняли, что, например, в конечном итоге запускается пример ввода массива размером 4 newArray[4] = array[4]
.