使用random int的ArrayIndexOutOfBoundsException

时间:2014-04-19 01:35:16

标签: java arrays random while-loop integer

我尝试使用此方法创建随机数并将该随机数保存在数组中

int[] ndigitos = new int[313];
public int  Imagenes(int cont) {


    do {

        nuevo = r.nextInt(313);

        for (int i = 0; i < total; i++) {

            if (nuevo == ndigitos[i])
                aux = 1;
        }

        if (aux == 0) {
            // agregar en la siguiente posicion el nuevo numero
            ndigitos[total] = nuevo;
            total++;
        }

        aux = 0;
    } while (total < 313);

    return ndigitos[cont];

}

但运行我的应用时出现此错误

java.lang.ArrayIndexOutOfBoundsException: length=313; index=313
at com.goldapp.imagenesparawhatsapp.Metodos.Imagenes(Metodos.java:97)
at com.goldapp.imagenesparawhatsapp.Main.onClick(Main.java:139)
at android.view.View.performClick(View.java:4091)
at android.view.View$PerformClick.run(View.java:17072)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5042)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

尝试将您的while条件修改为(total <312)

答案 1 :(得分:1)

数组的长度为313,从传递索引为313的错误消息开始,但最多只能访问312,因为数组以0而不是1开头。

所以从我看到的,你的错误可能来自两个地方,这一行:

ndigitos[total] = nuevo;

或这一行:

ndigitos[cont];

我无法看到你在哪里声明并设置total的初始值,你可能会在那里发现问题。 或者检查您作为参数cont传递的值,它可能是313

希望有所帮助