java.lang.ArrayIndexOutOfBoundsException:8

时间:2016-12-21 15:20:06

标签: java arrays

我是编程和尝试Java的新手,我创建了这个数组并给了我这个错误,任务是计算所有正面和负面的否并将它放在新的数组中我称为pArr和nArr,然后计算重复和写下它们以及它们重复多少次,有人可以帮助我吗?

public static void main(String[] args) {
        int[] array = {12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87};
        int brPoz=0, brNeg=0;

        for(int a=0; a<array.length; a++){
            if(array[a]>0)
                brPoz++;
            else if (array[a]<0)
                brNeg++;
        }
        int[] pArr = new int[brPoz];
        int[] nArr = new int[brNeg];     

        for (int i = 0; i < array.length; i++) {
            if (array[i] > 0) {
                pArr[i] = array[i];
            }
        }

        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                nArr[i] = array[i];
            }
        }


        Arrays.sort(array);
        Arrays.sort(pArr);
        Arrays.sort(nArr);
        System.out.println(java.util.Arrays.toString(array));
        System.out.println(java.util.Arrays.toString(pArr));
        System.out.println(java.util.Arrays.toString(nArr));


          for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if ((array[j])==array[i]) {
                    System.out.println("Duplikati su: "+array[j]);
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

你做的是,你首先计算所有正数和负数(顺便说一句:你忽略0 ......是正数吗?)。然后根据这些计数创建新数组。

brPoz和brNeg将小于原始数组的元素数。因此,您需要确保仅在结果数组中使用现有索引。

这可以通过

来实现
    int pArrIndex = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] > 0) {
            pArr[pArrIndex++] = array[i];
        }
    }

    int nArrIndex = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] < 0) {
            nArr[nArrIndex++] = array[i];
        }
    }