java - Android ArrayIndexOutOfBoundsException 错误长度=12;索引=-1

标签 java android

我想在 Android 中制作一个拼图应用程序。但我在日志中收到此错误:

java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1 etc.

而且我找不到解决该问题的错误代码。

我写了这段代码:

ArrayList<Integer> resimsayi = new ArrayList<Integer>();

        resimsayi.add(1);
        resimsayi.add(2);
        resimsayi.add(3);
        resimsayi.add(4);
        resimsayi.add(5);
        resimsayi.add(6);
        resimsayi.add(7);
        resimsayi.add(8);
        resimsayi.add(9);

        ArrayList<Integer> resimler = new ArrayList<Integer>();

        resimler.add(R.drawable.ari);
        resimler.add(R.drawable.aslan);
        resimler.add(R.drawable.ayi);
        resimler.add(R.drawable.fil);
        resimler.add(R.drawable.kedi);
        resimler.add(R.drawable.kopek);
        resimler.add(R.drawable.koyun);
        resimler.add(R.drawable.maymun);
        resimler.add(R.drawable.zurafa);

        ArrayList<String> resimad = new ArrayList<String>();

        resimad.add("ari");
        resimad.add("aslan");
        resimad.add("ayi");
        resimad.add("fil");
        resimad.add("kedi");
        resimad.add("kopek");
        resimad.add("koyun");
        resimad.add("maymun");
        resimad.add("zurafa");

        Random rastgele = new Random();

        Log.w("hello", "hello");

        int secilen = rastgele.nextInt(resimsayi.size());
        int secilenindex = secilen-1;
        resimb4.setImageResource(resimler.get(secilenindex));
        resimsayi.remove(resimsayi.indexOf(secilen));

        Log.w("1 secildi", "1 secilddi index alindi silindi");
        Log.w("degiskenlerrr", "secilen değer : " + secilen + " secilenindex : " + secilenindex + " resimsayi : " + resimsayi);

        bulmacat.setText(resimad.get(secilenindex) + "secilen : " + secilen +  "resimsayi secilen get : " + resimsayi.get(secilen-1) + "resimsayi : " + resimsayi);

        int resimd1 = rastgele.nextInt(resimsayi.size());
        int resimd1index = resimd1-1;
        resimb1.setImageResource(resimler.get(resimd1index));
        resimsayi.remove(resimsayi.indexOf(resimd1));

        Log.w("2 secildi", "2 secildi index alindi silindi");
        Log.w("degiskenlerr", "secilen değer : " + resimd1 + " secilenindex: " + resimd1index + " resimsayi" + resimsayi);

        int resimd2 = rastgele.nextInt(resimsayi.size());
        int resimd2index = resimd2-1;
        resimb2.setImageResource(resimler.get(resimd2index));
        resimsayi.remove(resimsayi.indexOf(resimd2));

        Log.w("3 secildi", "3 secilddi index alindi silindi");
        Log.w("degiskenlerrr", "secilen değer : " + resimd2 + " secilenindex : " + resimd1index + " resimsayi : " + resimsayi);

        int resimd3 = rastgele.nextInt(resimsayi.size());
        int resimd3index = resimd3-1;
        resimb3.setImageResource(resimler.get(resimd3index));
        resimsayi.remove(resimsayi.indexOf(resimd3));

        Log.w("4 secildi", "4 secilddi index alindi silindi");
        Log.w("degiskenlerrr", "secilen değer : " + resimd3 + " secilenindex : " + resimd3index + " resimsayi : " + resimsayi);


        Log.w("2 3 4 secildi", " 2 3 4 secildi, index alindi, silindi");

日志:

W/hello   ( 2863): hello
W/1 secildi( 2863): 1 secilddi index alindi silindi
W/degiskenlerrr( 2863): secilen değer : 6 secilenindex : 5 resimsayi : [1, 2, 3, 4, 5, 7, 8, 9]
W/2 secildi( 2863): 2 secildi index alindi silindi
W/degiskenlerr( 2863): secilen değer : 2 secilenindex: 1 resimsayi[1, 3, 4, 5, 7, 8, 9]

E/AndroidRuntime( 2863): FATAL EXCEPTION: main

E/AndroidRuntime( 2863): Process: com.example.x_ren.dnm, PID: 2863

E/AndroidRuntime( 2863): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.x_ren.dnm/com.example.x_ren.dnm.gosterim}: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1

E/AndroidRuntime( 2863):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)

E/AndroidRuntime( 2863):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)

E/AndroidRuntime( 2863):    at android.app.ActivityThread.access$800(ActivityThread.java:151)

E/AndroidRuntime( 2863):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)

E/AndroidRuntime( 2863):    at android.os.Handler.dispatchMessage(Handler.java:102)

E/AndroidRuntime( 2863):    at android.os.Looper.loop(Looper.java:135)

E/AndroidRuntime( 2863):    at android.app.ActivityThread.main(ActivityThread.java:5254)

E/AndroidRuntime( 2863):    at java.lang.reflect.Method.invoke(Native Method)

E/AndroidRuntime( 2863):    at java.lang.reflect.Method.invoke(Method.java:372)

E/AndroidRuntime( 2863):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

E/AndroidRuntime( 2863):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

E/AndroidRuntime( 2863): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1

E/AndroidRuntime( 2863):    at java.util.ArrayList.remove(ArrayList.java:405)

E/AndroidRuntime( 2863):    at com.example.x_ren.dnm.gosterim.onCreate(gosterim.java:117)

E/AndroidRuntime( 2863):    at android.app.Activity.performCreate(Activity.java:5990)

E/AndroidRuntime( 2863):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)

E/AndroidRuntime( 2863):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)

E/AndroidRuntime( 2863):    ... 10 more

如何解决这个问题?

最佳答案

int secilen = rastgele.nextInt(resimsayi.size()-1)+1;
int secilenindex = secilen;

与上面类似地替换所有地方。这样在生成数字number的时候就可以避免0了。

另外,修改所有remove()语句如下:

resimsayi.remove(secilen);

而不是:

resimsayi.remove(resimsayi.indexOf(secilen));

关于java - Android ArrayIndexOutOfBoundsException 错误长度=12;索引=-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729590/

相关文章:

Java - 检测主监视器

java - MAVEN,如何根据环境删除JSP页面

java - Char 数组与 Byte 数组该使用哪一个?

java - 将一个节点拖放到另一个节点中

android - 从 android JB 4.1.1 中的命令行进行蓝牙配对

java - 如何创建一个自动更改其字体大小以适应空间的 TextView ?

android - 7 英寸平板电脑和手机的实际图像尺寸

java - 生成唯一的随机数并检查重复项

Android - 使用默认浏览器调用并重定向到指定的 url

android - 每次调用 JNI 方法时附加值