首页 > 解决方案 > 我想在不减小其大小的情况下将元素添加到特定位置的数组中,我试过了,但它显示(OutOfBoundsException)

问题描述

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]);
        }


    }

}

标签: javaarrays

解决方案


array尺寸是 X。不管它是什么,我们都称它为 X。然后你做:

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

换句话说,newArray大小为 X+1。然后,您遍历 0newArray.length并为每个 i 解析array[i]。当然,这意味着array[X]解决了一个不存在的条目。

与其问 SO,不如花一点时间学习调试。这简单!您真正要做的就是弄清楚一行代码应该做什么(只需查看它并基本上“成为计算机”。如果您愿意,请使用笔和纸),然后逐行运行代码并检查代码实际上做了你认为应该做的事情。

如果,逐行思考并解决,您意识到代码不是您想要的:太好了,您发现了一个错误。修复它并继续应用此过程。否则,您会发现代码实际执行的操作与您认为的不匹配。调试器在执行此操作时提供了很多帮助,但大量System.out.println语句也可以提供帮助。一旦您意识到例如 4 大小数组的示例输入最终运行newArray[4] = array[4].


推荐阅读