打印出数字在数组中重复的次数(ArrayIndexOutofBoundException)

时间:2017-03-31 18:01:35

标签: java arrays

我尝试做的是用随机数填充20个整数的数组,然后打印出每个整数重复的次数。我在尝试打印重复次数时遇到错误...这是我的代码:

package nivel3;

import java.util.Random;

public class exercicio3 {

    public static void main(String[] args) {
        int[] numeros;
        int i=0;

        numeros=new int[20];

        Random rand=new Random();
        System.out.println("FILLING ARRAY WITH 20 RANDOM INTEGERS (FROM 0-9) \n");
        do {
            for (i=0; i<20; i++) {
                numeros[i]=rand.nextInt(10);
                System.out.printf("position"+i+of numeros[20]: "+numeros[i]+"\n\n");
            }
        } while (i<20);

        System.out.println("--------------------------------------------------------------------- \n");
        System.out.println("SHOWING THE REPEATED POSITIONS (FOR EACH POSITION OF THE ARRAY)\n");

            for(int j=0; j<20; j++) {
                int k=0;
                do {
                    k++;
                    if (numeros[j]==numeros[k]) 
                        System.out.printf("the integer in the ["+j+"] position is equal to the integer in the ["+k+"] position \n");

                }while (k<20);
           }
    }
}

这是错误代码:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
    at nivel3.exercicio3.main(exercicio3.java:29)

2 个答案:

答案 0 :(得分:0)

您在k++之前正在numeros[k],这在最后一次迭代中导致ArrayIndexOutOfBoundsException。将k++移到循环的末尾而不是开头。

答案 1 :(得分:0)

我在这里看到两个问题。

第一个是对我没有意义。

do {
    for (i=0; i<20; i++) {
        numeros[i]=rand.nextInt(10);
        System.out.printf("position"+i+of numeros[20]: "+numeros[i]+"\n\n");
    }
} while (i<20);

你应该只做“for”。

我看到的第二个问题是“k ++”行应该在“if”下面。记住数组从0开始到大小为1(这意味着你可以从numeros [0]访问numeros [19])。

所以在你的代码中,当k = 19时,它再次进入for,然后你加+1,所以k = 20 ..和numeros [20]这会抛出ArrayIndexOutOfBoundsException