从java中的数组中删除重复的元素,得到java.lang.ArrayIndexOutOfBoundsException

时间:2018-11-30 10:55:31

标签: java arrays

我正在尝试从Java中的int []数组中删除重复的元素。在结果中声明tempArray后,我得到

  

java.lang.ArrayIndexOutOfBoundsException。

public static void main(String[] args) {
    int[] givenArray = {1,1,2,2,3,3,4,4,5,5,6,4,4,3,3,2,2,7,7,6,5,4,3,8,9,6};
    int n = givenArray.length;

    Arrays.sort( givenArray );

    int j = 0;
    int[] tempArray = {};
    for (int i = 0; i < n-1; i++) {
        if (givenArray[i] != givenArray[i+1]) {
           tempArray[j] = givenArray[i];
           j++;
        }
    }

    tempArray[j] = givenArray[n-1];

    for (int i : tempArray) {
        System.out.print(i+" ");
    }
}

4 个答案:

答案 0 :(得分:1)

您的逻辑几乎可以说是穆罕默德。只需进行2次更改。我在下面列出了它们:

  1. 正如Würgspaß所指出的那样,您需要像这样声明和实例化数组temparray[]int[] tempArray = new int[n];用定义的方式,它会创建一个大小为0的空数组。作为数组的特征,不能更改数组的大小。因此,当您尝试将其插入OutOfBounds异常时。

  2. 使用通常的迭代方式在tempArray[]循环中访问fori的值范围为0j({ {1}}(含)。 ==>

    j

这是整体更新的代码:

for (int i = 0; i <= j; i++)
{
    System.out.print(tempArray[i] + " ");
}

输出

  

package removeduplicatesfromarray; import java.util.Arrays; public class Main { public static void main(String[] args) { int[] givenArray = {1,1,2,2,3,3,4,4,5,5,6,4,4,3,3,2,2,7,7,6,5,4,3,8,9,6}; int n = givenArray.length; Arrays.sort( givenArray ); int j = 0; int[] tempArray = new int[givenArray.length]; for (int i = 0; i < n-1; i++) { if (givenArray[i] != givenArray[i+1]) { tempArray[j] = givenArray[i]; j++; } } tempArray[j] = givenArray[n-1]; for (int i = 0; i <= j; i++) { System.out.print(tempArray[i] + " "); } } }

答案 1 :(得分:-1)

int[] tempArray = {};定义一个长度为0的空数组。使用int[] tempArray = new int[n]; 避免ArrayIndexOutOfBoundsException

答案 2 :(得分:-1)

请使用HashSet而不是创建tempArray,因为您将必须先对数组进行排序,然后再对tempArray的大小进行排序,而使用集合时,这些复杂性都不需要。

答案 3 :(得分:-1)

尝试一下

int[] givenArray = {1,1,2,2,3,3,4,4,5,5,6,4,4,3,3,2,2,7,7,6,5,4,3,8,9,6};
        int n = givenArray.length;

        Arrays.sort( givenArray );

        int j = 0;
//        int[] tempArray = {};
        List tempArray = new ArrayList();
        for (int i = 0; i < n-1; i++)
        {
            if (givenArray[i] != givenArray[i+1])
            {
                tempArray.add(givenArray[i]);
                j++;
            }
        }
        tempArray.add(givenArray[n-1]);

        for (int i=0;i<tempArray.size(); i++)
        {
            System.out.print(tempArray.get(i)+" ");
        }