java - 我的代码抛出 ArrayIndexOutOfBoundsException

标签 java arrays if-statement for-loop repeat

我需要编写代码来写入数组中的所有负数和正数,我这样做了,代码的其他部分是写入所有重复的数字以及它们重复多少次,它可以工作,但它也会写入错误,我是java新手,所以如果有人可以帮助我的代码,谢谢

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

        //for petlja broji pozitivne i negativne clanove array-a
        for (int a = 0; a < array.length; a++) {
            if (array[a] > 0) {
                cntPoz++;
            } else if (array[a] < 0) {
                cntNeg++;
            }
        }

        // kreiranje novih nizova 
        int[] pArr = new int[cntPoz];
        int[] nArr = new int[cntNeg];
        //for petlja iz array-a premjesta sve pozitivne brojeve
        cntPoz = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] > 0) {
                pArr[cntPoz++] = array[i];
            }
        }

        //for petlja iz array-a premjesta sve negativne brojeve
        cntNeg = 0;
        for (int i = 0; i < array.length; i++) {
            if (array[i] < 0) {
                nArr[cntNeg++] = array[i];
            }
        }

        //sortiranje i ispis nizova
        Arrays.sort(pArr);
        Arrays.sort(nArr);
        System.out.println("Originalni niz je : \n" + java.util.Arrays.toString(array) + "\n");
        System.out.println("Niz pozitivnih brojeva : \n" + java.util.Arrays.toString(pArr) + "\n");
        System.out.println("Niz negativnih brojeva : \n" + java.util.Arrays.toString(nArr));
        System.out.println();
        System.out.println();

        int[] arr2 = new int[array.length];
        Arrays.sort(array);

        for (int i = 0; i < array.length; i++) {
            arr2[i]++;
            if (i + 1 < array.length) {
                if (array[i] == array[i + 1]) {
                    arr2[i]++;
                    i++;
                }
            }
        }
        for (int j = 0; j<array.length; j++){
        for (int i = j+1; i < array.length; i++) {
            if (arr2[i] > 0 && array[i]==array[i+1]) {
                System.out.println("Duplikati su : "+array[i] + " i pojavljuju se " + arr2[i]);
            }
        }
        System.out.println(Arrays.toString(array));
    }

错误:

这是输出:

Originalni niz je : 
[12, 23, -22, 0, 43, 545, -4, -55, 43, 12, 0, -999, -87]

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 13
Niz pozitivnih brojeva : 
[12, 12, 23, 43, 43, 545]

Niz negativnih brojeva : 
[-999, -87, -55, -22, -4]


Duplikati su : 0 i pojavljuju se 2
    at assignment.Assignment.main(Assignment.java:65)
Duplikati su : 12 i pojavljuju se 2
Duplikati su : 43 i pojavljuju se 2
C:\Users\User\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

最佳答案

我认为错误在这里:

if (arr2[i] > 0 && array[i]==array[i+1]) {

在最后一次迭代中,i+1 超过了数组的最大维度。

也许您想在上一次迭代时停止循环,以便进行最终比较,如下所示:

for (int i = j+1; i < array.length - 1; i++) {

关于java - 我的代码抛出 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284161/

相关文章:

python - 在 numpy 2D 中查找下坡所有点的索引

c - 预处理器 #if 指令

PHP MySQL 如果行具有正确的时间戳,则对一列求和

java - Mac OS X 上 sqlite4java Jar 的不满意链接错误

objective-c - 哪种类型的数组用于大量数字?

java - 比较 2 个列表中的元素时如何避免 O(N^2)?

java - 如何对从 JAVA 中的 .txt 文件读取的数组进行排序

c++ - 递归 C++ 函数中 if 与 while 的行为

java - MySQL 连接未关闭

java - 传承计划。我从哪说起呢?